熊猫读取csv内存不足

sun*_*nxd 8 python memory csv

当我写这篇文章时,我尝试使用Pandas操作一个大的CSV文件

df = pd.read_csv(strFileName,sep='\t',delimiter='\t')
Run Code Online (Sandbox Code Playgroud)

它引发了"pandas.parser.CParserError:错误标记数据.C错误:内存不足"wc -l表明有13822117行,我需要聚合在这个csv文件数据框上,有没有办法处理这个,然后拆分将csv分成几个文件并编写代码来合并结果?有关如何做到这一点的任何建议?谢谢

输入是这样的:

columns=[ka,kb_1,kb_2,timeofEvent,timeInterval]
0:'3M' '2345' '2345' '2014-10-5',3000
1:'3M' '2958' '2152' '2015-3-22',5000
2:'GE' '2183' '2183' '2012-12-31',515
3:'3M' '2958' '2958' '2015-3-10',395
4:'GE' '2183' '2285' '2015-4-19',1925
5:'GE' '2598' '2598' '2015-3-17',1915
Run Code Online (Sandbox Code Playgroud)

所需的输出是这样的:

columns=[ka,kb,errorNum,errorRate,totalNum of records]
'3M','2345',0,0%,1
'3M','2958',1,50%,2
'GE','2183',1,50%,2
'GE','2598',0,0%,1
Run Code Online (Sandbox Code Playgroud)

如果数据集很小,则下面的代码可以按照另一个提供的方式使用

df2 = df.groupby(['ka','kb_1'])['isError'].agg({ 'errorNum':  'sum',
                                             'recordNum': 'count' })

df2['errorRate'] = df2['errorNum'] / df2['recordNum']

ka kb_1  recordNum  errorNum  errorRate

3M 2345          1         0        0.0
   2958          2         1        0.5
GE 2183          2         1        0.5
   2598          1         0        0.0
Run Code Online (Sandbox Code Playgroud)

(错误记录的定义:当kb_1!= kb_2时,相应的记录被视为异常记录)

Uri*_*ren 2

基于在逐行读取 chunk 中读取 csv 文件时出现内存不足错误的代码片段。

我认为这kb_2是错误指示器,

groups={}
with open("data/petaJoined.csv", "r") as large_file:
    for line in large_file:
        arr=line.split('\t')
        #assuming this structure: ka,kb_1,kb_2,timeofEvent,timeInterval
        k=arr[0]+','+arr[1]
        if not (k in groups.keys())
            groups[k]={'record_count':0, 'error_sum': 0}
        groups[k]['record_count']=groups[k]['record_count']+1
        groups[k]['error_sum']=groups[k]['error_sum']+float(arr[2])
for k,v in groups.items:
    print ('{group}: {error_rate}'.format(group=k,error_rate=v['error_sum']/v['record_count']))
Run Code Online (Sandbox Code Playgroud)

此代码片段将所有组存储在字典中,并在读取整个文件后计算错误率。

如果组的组合太多,就会遇到内存不足的异常。