微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – pandas groupby一次用于多个数据帧/文件

我有多个巨大的tsv文件,我正在尝试使用pandas进行处理.我想按’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

我希望能够聚合多个文件输出,即能够同时按所有文件中的这两列进行分组,并打印一个常见输出,其总出现次数为“是”或“否”或者那个属性可能是什么.换句话说,我现在想一次在多个文件上使用groupby.如果文件没有这些列中的一个,则应该跳过该文件并转到下一个文件.

解决方法:

这是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自己的chunked CSV reader执行pandas计算.如果您的文件在GB范围内,则最好转换为bcolzPyTables等格式,因为它们是二进制格式,专为大型文件的数据分析而设计. CSV只是带有约定的文本blob.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐