【发布时间】:2019-10-06 18:59:06
【问题描述】:
这是我想要摆脱的场景:
我正在尝试阅读以下类型的 csv:
para1,para2,para3,para4
1,2,3,4,
1,2,3,4,5,
1,2,3,4,
2,3,4,5,6,7,8,9,0,
我正在使用以下命令并收到以下错误:
>>> import pandas as pd
>>> df =pd.read_csv("test.csv")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python35\lib\site-packages\pandas\io\parsers.py", line 702, in parser_f
return _read(filepath_or_buffer, kwds)
File "C:\Python35\lib\site-packages\pandas\io\parsers.py", line 435, in _read
data = parser.read(nrows)
File "C:\Python35\lib\site-packages\pandas\io\parsers.py", line 1139, in read
ret = self._engine.read(nrows)
File "C:\Python35\lib\site-packages\pandas\io\parsers.py", line 1995, in read
data = self._reader.read(nrows)
File "pandas\_libs\parsers.pyx", line 899, in pandas._libs.parsers.TextReader.read
File "pandas\_libs\parsers.pyx", line 914, in pandas._libs.parsers.TextReader._read_low_memory
File "pandas\_libs\parsers.pyx", line 968, in pandas._libs.parsers.TextReader._read_rows
File "pandas\_libs\parsers.pyx", line 955, in pandas._libs.parsers.TextReader._tokenize_rows
File "pandas\_libs\parsers.pyx", line 2172, in pandas._libs.parsers.raise_parser_error
pandas.errors.ParserError: Error tokenizing data. C error: Expected 4 fields in line 3, saw 5
我试图搜索问题并在 SO:
Python Pandas Error tokenizing data 上找到了这个帖子
所以,我试过了。这不是我所期待的。它正在截断值。
>>> df =pd.read_csv("test.csv",error_bad_lines=False)
b'Skipping line 3: expected 4 fields, saw 5\nSkipping line 5: expected 4 fields, saw 9\n'
>>> df
para1 para2 para3 para4
0 1 2 3 4
1 1 2 3 4
我想要的是这样的:
如果有额外的值,则将列作为在额外中找到的最高列的整数值。然后将其余值设为零(0)直到最后一列并读取 csv。
我期待的输出是这样的:
>>> df =pd.read_csv("test.csv")
>>> df
para1 para2 para3 para4 0 1 2 3 4
0 1 2 3 4 NaN NaN NaN NaN NaN
1 1 2 3 4 5.0 NaN NaN NaN NaN
2 1 2 3 4 NaN NaN NaN NaN NaN
3 2 3 4 5 6.0 7.0 8.0 9.0 0.0
>>> df = df.fillna(0)
>>> df
para1 para2 para3 para4 0 1 2 3 4
0 1 2 3 4 0.0 0.0 0.0 0.0 0.0
1 1 2 3 4 5.0 0.0 0.0 0.0 0.0
2 1 2 3 4 0.0 0.0 0.0 0.0 0.0
3 2 3 4 5 6.0 7.0 8.0 9.0 0.0
但是请注意,我不想照顾专栏。相反,程序必须自动理解并制作上面给出的列标题。
其次,请尽量避免建议我写标题。因为可能有很多列我可能无法编写标题,而只是保持原样。所以缺少的列标题将是如上所述的数字整数。有人有任何查询的解决方案,请告诉我?
【问题讨论】:
-
不是有效的解决方案,但可以工作..您可以先读取没有标题的 csv 文件,然后第二次您可以只读取标题
-
@AkshayNevrekar 可能是,但没有可用的熊猫解决方案吗?
-
以上只是pandas解决方案......也许你的意思是问是否可以通过调整
read_csv中的一些参数来完成,至少我不知道。 -
@AkshayNevrekar 是的,类似
-
我已经编辑了示例,因为我忘了在那里添加额外的逗号