gpt4 book ai didi

python - Pandas read_csv 在更改列数的情况下添加标题名称

转载 作者:太空狗 更新时间:2023-10-29 21:45:00 26 4
gpt4 key购买 nike

我有很多 csv 文件,我想用 Pandas (pd.read_csv) 阅读,但是,在某些文件中,中间添加了一列没有标题,如下例所示:

Apples, Pears
1, 2
3, 4
5, 6, 7

如果使用 pd.read_csv(example_file),则会抛出以下错误“ParserError:错误标记数据。C 错误:第 4 行中预期有 2 个字段,看到 3

我想避免跳过该行,而只是添加一个虚拟 header 名称,如 Unknown1,并得到以下结果:

Apples, Pears, Unknown1  
1, 2, np.nan
3, 4, np.nan
5, 6, 7

最佳答案

pandas 需要提前知道几何来构建数据框。您可以阅读标题行并添加几个虚拟列名称以提供列数,然后重新读取整个 csv 并丢弃最终未使用的列。

>>> import pandas as pd
>>> names = list(pd.read_csv('foo.csv', nrows=0)) + ['unknown1', 'unknown2']
>>> df=pd.read_csv('foo.csv', names=names, skiprows=1).dropna(axis='columns', how='all')
>>> df
Apples Pears unknown1
0 1 2 NaN
1 3 4 NaN
2 5 6 7.0

如果有很多额外的列,并且担心中间数据帧的内存占用,可以使用csv模块扫描文件并计算最大行数。与 pandas 不同,csv 非常乐意发出不同大小的行。

>>> with open('foo.csv', newline='') as in_fp:
... reader = csv.reader(in_fp)
... header = next(reader)
... num_cols = max(len(row) for row in reader)
...
>>> names = header + ['unknown{}'.format(i+1) for i in range(num_cols-len(header))]
>>> df = pd.read_csv('foo.csv', names=names, skiprows=1)
>>> df
Apples Pears unknown1
0 1 2 NaN
1 3 4 NaN
2 5 6 7.0

关于python - Pandas read_csv 在更改列数的情况下添加标题名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51028331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com