使用熊猫在大型csv文件中查找平均值
问题描述:
我有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。
答
根据您的文件命名方式,我会修复几件事情。我认为你的文件被命名为“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))
答
我假设数据集太大而无法作为熊猫数据框加载到内存中。如果是这种情况,请考虑在每个csv文件上使用生成器,类似的东西也是类似的:Where to use yield in Python best?
由于您之后的总体结果是平均值,您可以累积每行的总和并跟踪有多少行增量步骤。
记录距离和行数的总和;然后分开。此外,如果速度是一个问题,考虑看看这样的事情:(http://stackoverflow.com/questions/3122442/how-do-i-calculate-the-mean-of-a-column) –
你想做的事只能在Python中工作,或者你可以使用像sed和awk这样的Gnu/Linux工具? –
对不起,不熟悉sed和awk。如果可能的话,更喜欢Python。 – PythonGuy