我是Python的初学者。我搜索了我的问题,但找不到确切的要求。
我有一个文件夹,其中每个实验测量都有多个文件得分。他们的名字遵循一个趋势,例如XY0001.csv
,XY0002.csv
... XY0040.csv
。我想阅读所有这些文件并获取所有文件中每列的平均值,并以相同的格式将其存储在'result.csv'中。
答案 0 :(得分:2)
我建议使用pandas(str
)。我建议先使用pd.read_csv()阅读文件。如何准确读取文件取决于您的CSV文件的格式,我不知道从这里。如果要读取目录中的所有文件(这可能是解决此问题的最简单方法),请尝试使用read all files。
然后,您可以使用pd.concat()连接所有文件。最后,您可以计算要生成的指标(使用搜索功能查找如何计算每个特定指标)。为你做很多事情的一个很好的功能是describe function。
答案 1 :(得分:1)
要访问多个文件,您可以使用glob
模块。
import glob
path =r'/home/root/csv_directory'
filenames = glob.glob(path + "/*.csv")
Python的pandas
模块有一个解析csv文件的方法。它还有一些管理和处理csv文件的选项。
import pandas as pd
dfs = []
for filename in filenames:
dfs.append(pd.read_csv(filename))
.read_csv()
方法用于解析csv文件。
pd.concat(dfs, ignore_index=True)
.concat()
用于将所有数据连接到一个数据框中,并且易于处理。
答案 2 :(得分:0)
以下内容使用mkvirtualenv --python=python3.5 env_name
模块获取表单glob
当前文件夹中所有文件的列表,即以X*.csv
开头的所有CSV文件。对于它找到的每个文件,它首先跳过标题行(可选),然后使用x
技巧加载所有剩余行,以将行列表转换为列列表。
对于每一列,它将每个单元转换为一个整数并对这些值求和,将该总和除以找到的元素数,从而得出每列的平均值。然后,它以zip()
等格式将值写入输出result.csv
:
filename, av_col1, av_col2
所以如果你有import glob
import csv
with open('result.csv', 'w', newline='') as f_output:
csv_output = csv.writer(f_output)
for filename in glob.glob('X*.csv'):
print (filename)
with open(filename, newline='') as f_input:
csv_input = csv.reader(f_input)
header = next(csv_input)
averages = []
for col in zip(*csv_input):
averages.append(sum(int(x) for x in col) / len(col))
csv_output.writerow([filename] + averages)
包含:
XY0001.csv
Col1,Col2,Col3
6,1,10
2,1,20
5,2,30
将按如下方式编写:
result.csv
使用Python 3.5.2进行测试