【问题标题】:How to find the average of each cell in multiple csv's如何找到多个csv中每个单元格的平均值
【发布时间】:2021-02-03 06:11:49
【问题描述】:

我有几个 excel 文件,其中的数据格式与此类似

csv1             csv1
  a b c           a b c
x 1 2 3         x 3 2 1
y 4 5 6         y 6 5 4

总共有 3 个 csv,我需要用每个单元格的平均值创建一个新的 csv。 所以csv3 如下

  a       b        c
x (3+1)/2) (2+2)/2  (3+1)/2
y (6+4)/2  etc.

到目前为止,我已经导入了文件,但我不确定如何继续。

import pandas as pd

def Averager(fileA,fileB,fileC):
    csvA=pd.read_csv(fileA)
    csvB=pd.read_csv(fileB)
    csvC=pd.read_csv(fileC)
    g=pd.concat([csvA, csvB, csvC]).groupby(level=0).mean()
    print(g)                                                   
print(Averager('a.csv','b.csv','c.csv'))

【问题讨论】:

  • 你提到你有一个 Excel 工作簿,然后你提到你有 csvs - 是什么?您可以使用 openpyxlpandas 导入 Excel 工作簿,因此您不需要中间 csv,仅供参考。
  • df1.add(df2)/2 怎么样。或者,在您的情况下:(csvA+csvB+csvC)/3 - 提供所有 DataFrame 的形状相同,如示例所示。
  • 谢谢@S3DEV,成功了!

标签: python pandas numpy dataframe csv


【解决方案1】:

由于您标记了 numpy,我假设 numpy 解决方案会起作用。

import numpy as np
csv1 = np.genfromtxt('my_file1.csv', delimiter=',')
csv2 = np.genfromtxt('my_file2.csv', delimiter=',')
np.savetxt("foo.csv", (csv1+csv2)/2, delimiter=",")    

【讨论】:

  • 谢谢功夫熊猫!
【解决方案2】:

您已经很接近了,这是一个应该可行的解决方案。我使用 pathlib 来创建文件名,它很容易使用。

import pandas as pd
from pathlib import Path

p = Path(r"path/to/file")

data = {}
for i in range(1,4):
    f = p / f"csv{i}.csv"
    data[i]=pd.read_csv(f)

df = pd.concat(data)
avg=df.groupby(level=1).mean()

print(df)
print(avg)

【讨论】:

  • 推荐使用 os.path.join 并在 p / ("csv"+str(i)+".csv") 上使用字符串格式,因为它非常不符合 Python 风格。
  • @S3DEV 不,这是pathlib 之前的旧方式。虽然我不同意他们选择字符串连接:p / f"csv{i}.csv"
  • @MaximilianBurszley - 得分。在这种情况下,pathlib 语法很糟糕。在我的脑海中/ 是一个除法运算符。伊克。
  • @S3DEV 当你有多个路径片段时看起来更好:p / "root" / "files" / "etc"
  • @S3DEV - 我花了一段时间才习惯,但现在我只使用 pathlib,我真的开始喜欢使用“/”连接路径的想法。
【解决方案3】:

一种超级简单的方法,将 CSV 数据读入 DataFrames 后是:

 df1.add(df2)/2

或者,在这种特定情况下:

(csvA+csvB+csvC)/3

如果所有 DataFrame 具有与原始示例中所示相同的形状(和数字),则此方法有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多