【问题标题】:pandas groupby for multiple data frames/files at oncepandas groupby 一次用于多个数据帧/文件
【发布时间】:2015-05-31 00:41:57
【问题描述】:

我尝试使用 pandas 处理多个巨大的 tsv 文件。我想按“col3”和“col5”分组。我试过这个:

import pandas as pd
df = pd.read_csv('filename.txt', sep = "\t")
g2 = df.drop_duplicates(['col3', 'col5'])
g3 = g2.groupby(['col3', 'col5']).size().sum(level=0)
print g3

到目前为止它工作正常,并打印如下输出:

yes 2
no  2

我希望能够聚合来自多个文件的输出,即能够一次按所有文件中的这两列进行分组,并打印一个常见的输出,其中出现“是”或'no' 或任何可能的属性。换句话说,我现在想一次对多个文件使用 groupby。如果一个文件没有这些列之一,它应该被跳过并转到下一个文件。

【问题讨论】:

    标签: python csv pandas group-by


    【解决方案1】:

    一种方法是连接 dfs。它可以吃掉很多内存。文件有多大?

    filelist = ['file1.txt', 'file2.txt']
    df = pd.concat([pd.read_csv(x, sep="\t") for x in filelist], axis=0)
    

    【讨论】:

      【解决方案2】:

      这是blaze 的一个很好的用例。

      这是一个使用来自nyctaxi dataset 的几个缩减文件的示例。我特意将一个大文件分成两个文件,每个文件 1,000,000 行:

      In [16]: from blaze import Data, compute, by
      
      In [17]: ls
      trip10.csv  trip11.csv
      
      In [18]: d = Data('*.csv')
      
      In [19]: expr = by(d[['passenger_count', 'medallion']], avg_time=d.trip_time_in_secs.mean())
      
      In [20]: %time result = compute(expr)
      CPU times: user 3.22 s, sys: 393 ms, total: 3.61 s
      Wall time: 3.6 s
      
      In [21]: !du -h *
      194M    trip10.csv
      192M    trip11.csv
      
      In [22]: len(d)
      Out[22]: 2000000
      
      In [23]: result.head()
      Out[23]:
         passenger_count                         medallion  avg_time
      0                0  08538606A68B9A44756733917323CE4B         0
      1                0  0BB9A21E40969D85C11E68A12FAD8DDA        15
      2                0  9280082BB6EC79247F47EB181181D1A4         0
      3                0  9F4C63E44A6C97DE0EF88E537954FC33         0
      4                0  B9182BF4BE3E50250D3EAB3FD790D1C9        14
      

      注意: 这将使用 pandas 自己的分块 CSV 阅读器执行计算。如果您的文件在 GB 范围内,则最好转换为 bcolzPyTables 等格式,因为这些是二进制格式,专为大文件的数据分析而设计。 CSV 只是带有约定的文本块。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-31
        • 2020-06-14
        • 2014-07-04
        相关资源
        最近更新 更多