我有很多csv文件,我想用Pandas(pd.read_csv)阅读,但是,在一些文件中添加了一个没有标题的中间列,如下例所示:
Apples, Pears
1, 2
3, 4
5, 6, 7
Run Code Online (Sandbox Code Playgroud)
如果使用pd.read_csv(example_file),则抛出以下错误" ParserError:错误标记数据.C错误:第4行中预期2个字段,看到3 "
我想避免跳过该行,而只是添加一个虚拟头名称,如Unknown1,并得到以下结果:
Apples, Pears, Unknown1
1, 2, np.nan
3, 4, np.nan
5, 6, 7
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
如果有很多额外的列,并且您担心中间数据帧的内存占用,则可以使用该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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3322 次 |
| 最近记录: |