我在阅读csv文件时遇到问题。问题是由于文件的结构。我想把它读成一个pandas dataframe对象,但有些行有更多的列,然后是其他行。例如,我可能希望大多数数据采用如下形式:
Col1,Col2,Col3
a,b,c,
a,b,c,
a,a,b,c,
a,b,c,c,
a,b,c
有没有办法可以逐行读取csv文件,这样就可以创建两个数据框,一个是预期的列数,另一个是需要进一步检查的行?
答案 0 :(得分:2)
一种方式 - 低效但有效 - 是为了腾出比你需要的空间更多的空间:
>>> df = pd.read_csv("knop.csv", names=range(6))
>>> df
0 1 2 3 4 5
0 Col1 Col2 Col3 NaN NaN NaN
1 a b c NaN NaN NaN
2 a b c NaN NaN NaN
3 a a b c NaN NaN
4 a b c c NaN NaN
5 a b c NaN NaN NaN
>>> df = df.dropna(axis=1,how='all')
>>> df
0 1 2 3
0 Col1 Col2 Col3 NaN
1 a b c NaN
2 a b c NaN
3 a a b c
4 a b c c
5 a b c NaN
数据全部在一个帧中后,处理和分离它(包括将第一行提升回列名)应该很简单。
答案 1 :(得分:0)
您应该将此视为两阶段过程:数据清理,然后加载。您可以使用Python的内置csv
模块执行清理步骤,逐个检查每一行。除非你只是想丢弃额外的列,否则你需要这样的东西来处理你的锯齿线。