我有一个相当大的csv文件(700mb),其组装如下:
qCode Date Value A_EVENTS 11/17/2014 202901 A_EVENTS 11/4/2014 801 A_EVENTS 11/3/2014 2.02E+14 A_EVENTS 10/17/2014 203901 etc.
我正在解析此文件以获取特定值,然后使用航向位置要填充预先存在的数据帧,即代码:
对于fileParse中的行:
^{pr2}$我的问题是.loc是向现有数据帧添加值的最有效方法?因为这个手术似乎要花10个多小时。。。在
fyi字段是DF(我感兴趣的值)中的列,索引(i)是一个字符串。。。在
谢谢
否,您不应该逐行构建数据帧。每次这样做,整个数据帧都必须被复制(它不是在内部扩展的),所以您使用的是n+(n-1)+(n-2)+。。。+1,O(n^2),内存(必须垃圾收集)。。。太可怕了,所以要花几个小时!
您想使用^{cd1>},您有几个选项:
一次读取整个文件(即使只需几吉ram,700mb也可以)。
在csv中以块形式读取,然后将它们粘在一起(在内存中)。。。我想这并不会比上面的记忆少,但是如果你在这一步上大嚼一口,它通常是有用的。
将csv分块读取并保存到pytables(而不是内存中),如果您的数据多于内存(并且您已经购买了更多内存),那么使用pytables/hdf5!
如果我理解正确的话,我想:
pandas.read_csv
将整个csv导入到数据帧中。在df.append(other_df)
将行追加到其他数据帧。在如果您在第2步中提供更多关于您使用什么标准的信息,我也可以在那里提供代码。在
想到的几个选择
1)像您当前所做的那样解析文件,但是构建一个dict意图将其附加到数据帧中。完成后,将dict转换为一个Dataframe,然后使用concat()将其与现有的Dataframe组合
2)使用read_csv()将csv带到pandas中,然后过滤/解析所需内容,然后对现有数据帧执行concat()
相关问题 更多 >
编程相关推荐