Python 如何在多个csv';s
我有几个excel文件,其中的数据格式与此类似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. 到目前为止,我已经导入了文件,但我不确定如何
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,我真的开始喜欢使用“/”来连接路径的想法。谢谢功夫熊猫!