【问题标题】:Find average in large csv file using pandas使用 pandas 在大型 csv 文件中查找平均值
【发布时间】:2017-04-20 13:37:56
【问题描述】:

我有 60 个巨大的 csv 文件(每个大约 2.5 GB)。每个涵盖一个月的数据,并有一个我感兴趣的“距离”列。每个都有大约 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()

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

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

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

【问题讨论】:

  • 跟踪距离和行数的总和;然后分。此外,如果速度是一个问题,请考虑查看以下内容:(stackoverflow.com/questions/3122442/…)
  • 您只想在 Python 中完成这项工作,或者您可以使用 sed 和 awk 等 Gnu/Linux 工具?
  • 抱歉,不熟悉 sed 和 awk。如果可能,更喜欢 Python。
  • 查看 pd.read_csv() 的“usecols”和“squeeze”参数。加载你不使用的列是没有意义的,对吧?

标签: python csv pandas mean


【解决方案1】:

根据您的文件命名方式,我会修复一些问题。我想你的文件被命名为“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))

【讨论】:

    【解决方案2】:

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

    由于您所追求的总体结果是平均值,因此您可以累积每行的总和并跟踪增量步长的行数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-18
      • 2015-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-01
      相关资源
      最近更新 更多