我正在ipython笔记本中使用pandas阅读~3Gb csv。在阅读文件时,笔记本意外地给我一条错误消息,说内核似乎已经死亡并将重新启动。
根据python / pandas中的几个“大数据”工作流程,我正在按如下方式读取文件:
import pandas as pd
tp = pd.read_csv(file_name_cleaned,chunksize,iterator=True,low_memory=False)
df = pd.concat(tp,ignore_index=True)
我的工作流程涉及一些预处理,以删除除字母数字字符之外的所有字符和一些标点符号,如下所示:
with open(file_name,'r') as file1:
with open(file_name_cleaned,'w') as file:2
for line in file1:
if len(line.split(sep_string)) == num_columns:
line = re.sub(r'[^A-Za-z0-9|._]+','',line)
file2.write(line+'\n')
奇怪的是,如果我删除包含re.sub()的行,我会得到一个不同的错误 - “预期209文件,在22236行中看到,看到329”,即使我已经明确检查了确切的数字分隔符。对线路和周围线路进行目视检查并不能给我带来太多帮助。
这个过程适用于其他几个文件,包括较大的文件,所以我不认为文件的大小是问题,尽管我认为这可能是过于简单化了。
我包含了预处理,因为我从经验中知道,有时数据包含奇怪的特殊字符,我也在使用encoding ='utf-8'和encoding ='utf-8-sig'之间来回走动read_csv()和open()语句没有实际效用。
我有几个问题 - 包括编码关键字参数会导致python忽略这些字符集之外的字符,还是可能会为这些字符调用某种转换?我对这些类型的问题不是很熟悉。某些意想不到的角色是否有可能在我的预处理过程中滑落并造成这种情况?还有其他类型的问题,我没有找到可能导致这种情况吗? (我做过研究,但没有什么是对的。)
非常感谢任何帮助。
另外,我使用的是Anaconda 2.4,Python 3.5.1,Ipython 4.0.0和pandas 0.17.0
答案 0 :(得分:3)
我不确定这完全回答了我的问题,但我确实解决了这个问题,虽然速度较慢,但在pd.read_csv()中使用engine ='python'可以解决问题。