【发布时间】:2019-08-06 10:38:48
【问题描述】:
我在 CSV 中有固定的列。我正在使用 Pandas 的 read_csv。 但有些行有额外的列值。我需要将所有额外的列合并到最后一列。
基本上,我正在尝试读取 CSV,它在某些列中有特殊字符 ( , ) 和 ( ' ),因此它正在拆分起来并创建额外的列。因此,我收到 'ParserError: Error tokenizing data。 C 错误:第 7 行中应有 4 个字段,看到 5'。 所以我需要一种方法将最后一列/额外列动态转换为最后一列
例如,在以下示例中,问题出在最后一列,它混合了 , 和 '。
from StringIO import StringIO
import pandas as pd
csv = r"""dummy,obj,loc,query
bar,6usrg82hwsa3,a,'select * from abc'
bar,b6usrg82hwsa3,a,'select * from abc'
bar,4g9cgbm813czs,a,'select * from abc'
bar,fhf8upax5cxsz,b,'select * from abc'
bar,cnphq355f5rah,b,'select * from abc'
bar,b6usrg82hwsa3,b,'SELECT LIST(HIGHLIGHT, ',') WITHIN GR...'"""
df = pd.read_csv(StringIO(csv), quotechar="'")
这将抛出 'Error tokenizing data'
预期的输出是
>>> print(df)
dummy obj loc query
0 bar 6usrg82hwsa3 a select * from abc
1 bar b6usrg82hwsa3 a select * from abc
2 bar 4g9cgbm813czs a select * from abc
3 bar fhf8upax5cxsz b select * from abc
4 bar cnphq355f5rah b select * from abc
5 bar b6usrg82hwsa3 b SELECT LIST(HIGHLIGHT, ',') WITHIN GR...
【问题讨论】:
-
如果使用
usecols=["dummy","obj", "loc", "query"]),您的示例效果很好 -
感谢@jezrael,但我想让这个函数通用且动态。因此不想指定“usecols”。