2016-12-06 90 views
1

我有60个巨大的csv文件(每个大约2.5 GB)。每个月的封面数据都有一个我感兴趣的'距离'专栏,每个专栏都有大约1400万行。使用熊猫在大型csv文件中查找平均值

我需要找到每个月的平均距离。

这是我到目前为止有:

import pandas as pd 
for x in range(1, 60): 
    df=pd.read_csv(r'x.csv', error_bad_lines=False, chunksize=100000) 
    for chunk in df: 
     print df["distance"].mean() 

首先,我知道“打印”是不是一个好主意。我需要将平均值分配给我想要的变量。其次,我需要的是整个数据帧的平均值,而不仅仅是每个块。

但我不知道该怎么做。我正在考虑获得每个块的平均值,并取所有块的简单平均值。只要chunksize对所有块都相等,那应该给我数据帧的平均值。

第三,我需要为60个csv文件中的所有文件执行此操作。我在上面的代码中正确循环了吗?我的文件被命名为1.csv到60.csv。

+2

记录距离和行数的总和;然后分开。此外,如果速度是一个问题,考虑看看这样的事情:(http://stackoverflow.com/questions/3122442/how-do-i-calculate-the-mean-of-a-column) –

+0

你想做的事只能在Python中工作,或者你可以使用像sed和awk这样的Gnu/Linux工具? –

+0

对不起,不熟悉sed和awk。如果可能的话,更喜欢Python。 – PythonGuy

回答

3

根据您的文件命名方式,我会修复几件事情。我认为你的文件被命名为“1.csv”,“2.csv”。还要记住,范围是排他性的,因此你需要去范围内的61。

distance_array = [] 
for x in range(1,61): 
    df = pd.read((str(x) + ".csv", error_bad_lines=False, chunksize=100000) 
    for index, row in df.iterrows(): 
     distance_array.append(x['distance']) 
print(sum(distance_array)/len(distance_array)) 
0

我假设数据集太大而无法作为熊猫数据框加载到内存中。如果是这种情况,请考虑在每个csv文件上使用生成器,类似的东西也是类似的:Where to use yield in Python best?

由于您之后的总体结果是平均值,您可以累积每行的总和并跟踪有多少行增量步骤。