【发布时间】:2016-12-18 13:23:48
【问题描述】:
我有一个大的 csv,我按如下方式加载
df=pd.read_csv('my_data.tsv',sep='\t',header=0, skiprows=[1,2,3])
我在加载过程中遇到了几个错误。
-
首先,如果我不指定
warn_bad_lines=True,error_bad_lines=False,我会得到:标记数据时出错。 C 错误:预计第 329867 行中有 22 个字段,见 24
-
其次,如果我使用上面的选项,我现在得到:
CParserError:标记数据时出错。 C 错误:字符串中的 EOF 从第 32357585 行开始
问题是:我如何查看这些坏线以了解发生了什么?是否有可能让read_csv 返回这些虚假行?
我尝试了以下提示 (Pandas ParserError EOF character when reading multiple csv files to HDF5):
from pandas import parser
try:
df=pd.read_csv('mydata.tsv',sep='\t',header=0, skiprows=[1,2,3])
except (parser.CParserError) as detail:
print detail
但还是得到了
标记数据时出错。 C 错误:预计第 329867 行中有 22 个字段,见 24
【问题讨论】:
-
你检查了第一个答案吗?会是特殊字符吗? stackoverflow.com/questions/18016037/…
-
第 32357585 行的数据是什么?这可能会提供一些线索并检查熊猫版本,github.com/pydata/pandas/issues/11654
-
是的,这就是问题所在。如何读取这条数据线?
-
如果是 CSV,在 CSV 中打开它(假设是 windows 框)(或)使用其他一些文件读取 API 来首先打印和理解数据,一旦你知道那里有什么,那么你可以尝试使用 pandas 找到解决方法。
-
Pandas 读取前几行,确定 dtypes,然后读取确定的 dtypes 中的其余数据。有时这会导致对字符串的误解。
low_memory只会导致 pandas 在读取所有数据后创建数据类型。它会导致内存中的数据重复。但你是对的,它可能对你的情况没有帮助。其他建议怎么样?