Python loc是构建熊猫数据帧的最佳方法吗?
我有一个相当大的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. 我的问题是,向现有数据帧添加值的最有效方法是什么?由于这项行动似乎需要10个多小时 fyi字段是DF中的列(我感兴趣的值),索引(i)是字符串Python loc是构建熊猫数据帧的最佳方法吗?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个相当大的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. 我的问题是,向现有数据帧添加值的最有效方法是什么?由于这项行动似乎需要10个多小时 fyi字段是DF中的列(我感兴趣的值),索引(i
谢谢如果我理解正确,我想这样做会更快:
pandas.read\u csv
将整个csv导入数据框df.Append(other_df)
将行附加到其他数据帧如果您提供了更多关于您在步骤2中使用的标准的信息,我也可以在那里提供代码。想到的几个选项 1) 按照您当前所做的方式解析文件,但构建一个dict,以便附加到数据帧。完成该操作后,将该dict转换为数据帧,然后使用concat()将其与现有数据帧组合
2) 使用read_csv()将该csv导入pandas,然后对所需内容进行过滤/解析,然后对现有数据帧执行concat(),不应逐行构建数据帧。每次执行此操作时,都必须复制整个数据帧(它不是就地扩展的),因此使用n+(n-1)+(n-2)+…+1,O(n^2),内存(必须进行垃圾收集)。。。这太可怕了,所以要花几个小时 您想使用
读取\u csv
,您有几个选项:
- 一次性读取整个文件(即使只需几gig内存,700mb也可以)
- 分块读取csv,然后将它们粘在一起(内存中)。。。tbh我不认为这会比上面使用更少的内存,但是如果你在这一步做一些咀嚼,这通常是有用的
pd.concat(pd.read_csv('foo.csv', chunksize=100000)) # not sure what optimum value is for chunksize
- 分块读取csv并将其保存到pytables中(而不是内存中),如果您的数据多于内存(并且您已经购买了更多内存),则使用pytables/hdf5
store = pd.HDFStore('store.h5') for df in pd.read_csv('foo.csv', chunksize=100000): store.append('df', df)
pd.concat(pd.read_csv('foo.csv', chunksize=100000)) # not sure what optimum value is for chunksize
store = pd.HDFStore('store.h5')
for df in pd.read_csv('foo.csv', chunksize=100000):
store.append('df', df)