繁体   English   中英

将5GB CSV文件读取到pandas数据框中时出现意外行为

[英]Unexpected behavior when reading a 5GB CSV file into pandas dataframe

我有一个很大的(5GB)CSV文件,我想加载到pandas.DataFrame 我尝试运行以下命令:

df = pd.read_csv('./original-utf8.csv')

但这产生了一个错误:

CParserError: Error tokenizing data. C error: Expected 92 fields in line 3098834, saw 163

我手动检查了3098834 +/- 1行,一切正常。

然后,我尝试忽略有问题的行:

df = pd.read_csv('./original-utf8.csv', error_bad_lines=False)

这次,我收到了以下样式的23条警告:

b'Skipping line 3098834: expected 92 fields, saw 163\n'

似乎没有一个是有问题的。

此外,产生的DataFrame中的行数与CSV文件中的行数不匹配(即使在考虑了警告数之后)。 好像pandas (?)掉了更多的行却什么也没说。

任何想法? 我如何发现问题出在哪里?

确保到处都有相同数量的列

awk -F, '{print NF}' file.csv | sort -u

如果得到的结果多于1,则表示文件格式不正确。

另外,您可以尝试像这样加载数据

df=pd.read_csv("file.csv",nrows=3098834-1)

如果行得通,您就会知道前几行是不错的。 然后您可以尝试像这样加载文件

df=pd.read_csv("file.csv",skiprows=3098834+2)

您的五个演出文件似乎缺少换行符...

 delim= ","
 a = []    
 f = open(file)
 text = f.read()
 text = text.split("\n")
 fields = len(text[0])
 c = 0
 for k in text:
     if( len(k.split(delim))==fields ):
         a.append(k[0:fields])
         a.append(["wonkyRow"+str(c)]+k[fields:len(k)]+[0]*(92-len(k)))
         c+=1
     else:
         a.append(k)
 df = pandas.df(data = [tuple(k) for k in a])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM