我有60个巨大的csv文件(每个大约2.5 GB)。每个封面数据一个月,并且距离为#39;我感兴趣的专栏。每行有大约1400万行。
我需要找到每个月的平均距离。
这是我到目前为止所做的:
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()
首先我知道' print'不是个好主意。我需要将均值分配给变量。其次,我需要的是整个数据帧的平均值,而不仅仅是每个块。
但我不知道该怎么做。我想要获得每个块的平均值并采用所有块的简单平均值。只要chunksize对所有块都相等,那就应该给出数据帧的平均值。
第三,我需要为所有60个csv文件执行此操作。我在上面的代码中循环是否正确?我的文件名为1.csv到60.csv。
答案 0 :(得分: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))
答案 1 :(得分:0)
我假设数据集太大而无法作为pandas数据帧加载到内存中。如果是这种情况,请考虑在每个csv文件上使用生成器,类似的东西:Where to use yield in Python best?
由于您所追求的总体结果是平均值,您可以累计每行的总和并跟踪增量步的行数。