Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在多个csv';s_Python_Pandas_Numpy_Dataframe_Csv - Fatal编程技术网

Python 如何在多个csv';s

Python 如何在多个csv';s,python,pandas,numpy,dataframe,csv,Python,Pandas,Numpy,Dataframe,Csv,我有几个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. 到目前为止,我已经导入了文件,但我不确定如何

我有几个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'))

你已经很接近了,这里有一个解决方案应该是可行的。我使用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)

因为您标记了
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=",")    

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

 df1.add(df2)/2
或者,在这种特定情况下:

(csvA+csvB+csvC)/3

如果所有数据帧的形状(和数字)都与原始示例中所示相同,则此操作有效。

您提到您有一个Excel工作簿,然后您提到您有CSV,是哪一个?您可以使用
openpyxl
pandas
导入Excel工作簿,这样您就不需要中间CSV了,仅供参考。
df1.add(df2)/2
呢。或者,在您的例子中:
(csvA+csvB+csvC)/3
-假设所有数据帧的形状都相同,如示例所示。谢谢@S3DEV,这很有效!建议在此
p/(“csv”+str(i)+“.csv”)
上使用
os.path.join
和字符串格式,因为它非常不符合Pythonic。@S3DEV否,这是以前的
pathlib
方法。虽然我不同意他们选择字符串concat:
p/f“csv{I}.csv”
@MaximilianBurszley-重点关注。在这种情况下,
pathlib
语法非常糟糕。在我的头脑中,
/
是除法运算符。Ick@S3DEV如果你有多个路径片段,它看起来会更好:
p/“root”/“files”/“etc”
@S3DEV-我花了一段时间才习惯,但现在我只使用pathlib,我真的开始喜欢使用“/”来连接路径的想法。谢谢功夫熊猫!