当前位置: 首页 > 面试题库 >

pandas从内存中读取csv

杨志强
2023-03-14
问题内容

当我写这篇文章时,我尝试使用Pandas处理大型CSV文件。

df = pd.read_csv(strFileName,sep='\t',delimiter='\t')

它会引发“ 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

所需的输出是这样的:

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

如果数据集较小,则可以使用下面的代码(由另一个提供)

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

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


问题答案:

根据您的代码段中的内存不足错误,当逐行读取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']))

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

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



 类似资料:
  • 因此,我一直在尝试使用pandas<code>read_csv。 所以作为选择 > < li> 我尝试定义< code>dtype以避免将数据作为字符串保存在内存中,但看到了类似的行为。 尝试numpy read csv,以为我会得到一些不同的结果,但肯定是错误的。 试着一行一行地读也遇到了同样的问题,但是真的很慢。 我最近转到了python 3,所以认为那里可能有一些bug,但在python2

  • 谁能指导我怎么做这件事吗? 我是一个新的android所以请,如果我能有一个详细的程序,我会很感激。

  • 打电话的时候 我得到: /Users/josh/anaconda/envs/py27/lib/python2。7/站点包/熊猫/io/解析器。py:1130:DtypeWarning:列(4,5,7,16)具有混合类型。在导入时指定dtype选项或将低内存设置为False。 为什么选项与相关,为什么将其设为有助于解决此问题?

  • 我现在正为一个问题苦苦挣扎,希望你能帮我解决...基本上,我试图通过这种方式从手机的内部图库中获取一些图像 意向意向=新意向(); Intent.SetAction(Intent.Action_Get_Content); startActivityForResult(intent.createchooser(intent,“select picture”),SELECT_IMAGE); 但是当我使

  • 我试图创建一个简单的java程序,从zip文件中读取并提取文件内容。Zip文件包含3个文件(txt、pdf、docx)。我需要阅读所有这些文件的内容,为此我正在使用ApacheTika。 有人能帮我实现这个功能吗。到目前为止,我已经试过了,但没有成功 代码片段

  • 是否可以在不使用下载功能的情况下读取文件中的值? 代替的东西: 类似于: