几个小时以来,我一直在为这个问题而苦苦挣扎,但我似乎无法弄清楚。如果有任何帮助,我将不胜感激。
背景
我正在尝试通过 python 为我在学校的研究实验室自动化数据操作。从实验中,.csv
将生成一个包含 41 行数据(不包括标题)的文件,如下所示。
有时,同一实验的多次运行会产生.csv
具有相同标头的文件,需要对它们取平均值以确保准确性。类似这样的行数和标题数相同的东西:
到目前为止,我能够过滤基本名称以仅包含.csv具有相同参数的文件并将它们添加到数据框中。但是,我的问题是我不知道如何继续获得平均值。
我当前的代码和输出
代码:
import pandas as pd
import os
dir = "/Users/luke/Desktop/testfolder"
files = os.listdir(dir)
files_of_interests = {}
for filename in files:
if filename[-4:] == '.csv':
key = filename[:-5]
files_of_interests.setdefault(key, [])
files_of_interests[key].append(filename)
print(files_of_interests)
for key in files_of_interests:
stack_df = pd.DataFrame()
print(stack_df)
for filename in files_of_interests[key]:
stack_df = stack_df.append(pd.read_csv(os.path.join(dir, filename)))
print(stack_df)
输出:
Empty DataFrame
Columns: []
Index: []
Unnamed: 0 Wavelength S2c Wavelength.1 S2
0 0 1100 0.000342 1100 0.000304
1 1 1110 0.000452 1110 0.000410
2 2 1120 0.000468 1120 0.000430
3 3 1130 0.000330 1130 0.000306
4 4 1140 0.000345 1140 0.000323
[164 rows x 5 columns]
在这里提问!
所以我的问题是,如何让它分别为每个S2c
and向右追加S2
?
解释:
对于具有相同标头名称的多个 .csv 文件,当我将其附加到列表时,它只是不断堆叠到前一个文件的底部,.csv
这导致了[164 rows x 5 columns]
上一节的 。我最初的想法是创建一个新的数据框,并且只从这些文件中的每一个附加S2c
和,这样它就不会将它们堆叠在一起,而是将它们作为新列继续附加到右侧。之后,我可以进行某种形式的 pandas 列操作,将它们相加并除以运行次数(这只是文件数,因此在第二个FOR 循环下)。S2
.csv
len(files_of_interests[key])
我试过的
我尝试创建一个空数据框并添加一个从np.arange(1100,1500,10)
使用pd.DataFrame.from_records()
. 并按照我在上一节中描述的那样将S2c
and附加S2
到数据框。发生了同样的问题,除此之外,它还产生了一堆 Nan 值,即使在进一步搜索之后我也没有足够的能力来处理这些值。
我已经阅读了此处发布的其他多个问题,许多人建议使用,pd.concat
但由于答案是针对不同情况量身定制的,我无法真正复制它,也无法理解它的文档,所以我停止了这条路。
预先感谢您的帮助!
附加信息
我在代码中使用 macOS 和 ATOM。
可以在此处找到 csv 文件!
github: https://github.com/teoyi/PROJECT-Automate-Research-Process
九州编程
慕盖茨4494581
拉丁的传说
相关分类