Pandas在不知道标题是否存在的情况下读取_csv

2024-05-01 21:18:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含已知列的输入文件,假设有两列Name和{}。有时它有标题行Name,Sex,有时没有:

1.csv

Name,Sex
John,M
Leslie,F

2.csv

^{pr2}$

预先知道列的标识,有没有一种好方法可以用相同的read_csv命令来处理这两种情况?基本上,我想指定names=['Name', 'Sex'],然后只有当头在那里时,才让它推断header=0。我能想到的最好办法是:

  • 1)在执行read_csv之前读取文件的第一行,并设置 适当的参数。

  • 2)只要做df = pd.read_csv(input_file, names=['Name', 'Sex']), 然后检查zeroeth行是否与标题相同,如果 所以把它去掉(然后可能需要重新编号)。

但对我来说,这并不是一个不同寻常的用例。有没有一种我没有想到的用read_csv来做这件事的内置方式?在


Tags: 文件csv方法name命令标题readnames
1条回答
网友
1楼 · 发布于 2024-05-01 21:18:13

使用新功能-selection by callable

cols = ['Name','Sex']

df = (pd.read_csv(filename, header=None, names=cols)
      [lambda x: np.ones(len(x)).astype(bool)
                 if (x.iloc[0] != cols).all()
                 else np.concatenate([[False], np.ones(len(x)-1).astype(bool)])]
)

使用.query()方法:

^{pr2}$

我不确定这是否是最优雅的方式,但这应该同样有效:

df = pd.read_csv(filename, header=None, names=cols)

if (df.iloc[0] == cols).all():
    df = df[1:].reset_index(drop=True)

相关问题 更多 >