loc是构建pandas数据帧的最佳方法吗?

2024-06-09 00:46:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个相当大的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)是一个字符串。。。在

谢谢


Tags: 文件csv数据方法代码datevalueetc
3条回答

,您不应该逐行构建数据帧。每次这样做,整个数据帧都必须被复制(它不是在内部扩展的),所以您使用的是n+(n-1)+(n-2)+。。。+1,O(n^2),内存(必须垃圾收集)。。。太可怕了,所以要花几个小时!

您想使用^{cd1>},您有几个选项:

  • 一次读取整个文件(即使只需几吉ram,700mb也可以)。

    pd.read_csv('your_file.csv')
    
  • 在csv中以块形式读取,然后将它们粘在一起(在内存中)。。。我想这并不会比上面的记忆少,但是如果你在这一步上大嚼一口,它通常是有用的。

    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)
    

如果我理解正确的话,我想:

  1. 使用pandas.read_csv将整个csv导入到数据帧中。在
  2. 从数据帧中选择感兴趣的行。在
  3. 使用df.append(other_df)将行追加到其他数据帧。在

如果您在第2步中提供更多关于您使用什么标准的信息,我也可以在那里提供代码。在

想到的几个选择

1)像您当前所做的那样解析文件,但是构建一个dict意图将其附加到数据帧中。完成后,将dict转换为一个Dataframe,然后使用concat()将其与现有的Dataframe组合

2)使用read_csv()将csv带到pandas中,然后过滤/解析所需内容,然后对现有数据帧执行concat()

相关问题 更多 >