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



我有一个大的(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 163n'

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

此外,生成的DataFrame中的行数与CSV文件中的行数来不匹配(即使考虑了警告的数量)。似乎pandas(?)什么也没说就丢了更多的行。

知道吗?我如何检测问题出在哪里?

确保各处的列数相同

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

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

此外,您可以尝试加载类似的数据

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

如果这有效的话,你知道前面的几行很好。然后你可以尝试加载像这样的文件

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

看起来您的五个gig文件缺少一个换行符。。。

 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])

最新更新