gpt4 book ai didi

python - 如何读取pandas中的多个表文件并取平均值?

转载 作者:行者123 更新时间:2023-11-30 22:10:44 27 4
gpt4 key购买 nike

这就是两个表的样子

5113.440  1     0.25846     0.10166    27.96867     0.94852    -0.25846   268.29305     5113.434129
5074.760 3 0.68155 0.16566 120.18771 3.02654 -0.68155 101.02457 5074.745627
5083.340 2 0.74771 0.13267 105.59355 2.15700 -0.74771 157.52406 5083.337081
5088.150 1 0.28689 0.12986 39.65747 2.43339 -0.28689 164.40787 5088.141849
5090.780 1 0.61464 0.14479 94.72901 2.78712 -0.61464 132.25865 5090.773443

那是另一张 table

5113.450  1     0.25846     0.10166    27.96867     0.94852    -0.25846   268.29305     5113.434129
5074.769 3 0.68155 0.16566 120.18771 3.02654 -0.68155 101.02457 5074.745627
5083.350 2 0.74771 0.13267 105.59355 2.15700 -0.74771 157.52406 5083.337081
5088.520 1 0.28689 0.12986 39.65747 2.43339 -0.28689 164.40787 5088.141849
5090.820 1 0.61464 0.14479 94.72901 2.78712 -0.61464 132.25865 5090.773443

我知道我可以阅读它们并可以使用以下命令获取它们的平均值:

df1 = pd.read_table("with_blaze.ares",skiprows=0,usecols=(0,1,2,3,4,8),names=['wave','num','stlines','fwhm','EWs','MeasredWave'],delimiter=r'\s+')
df2 = pd.read_table("without_blaze.ares",skiprows=0,usecols=(0,1,2,3,4,8),names=['wave','num','stlines','fwhm','EWs','MeasredWave'],delimiter=r'\s+')

df = df1 + df2

但是我有数百个这样的表文件。所以我想知道如何一起阅读它们,然后取平均值。并且所有文件的行数并不相同,例如有些文件有 600 行,而其他文件只有 540 行。那么我怎样才能根据表中第一列求行的平均值???

最佳答案

将所有文件连接到一个 DataFrame 中,然后使用 wave 值进行分组并计算平均值。

import os
import pandas as pd

path_to_files = 'something'
lst = []
for filen in [x for x in os.listdir(path_to_files) if '.ares' in x]:
lst.append(pd.read_table(path_to_files+filen, skiprows=0, usecols=(0,1,2,3,4,8),
names=['wave','num','stlines','fwhm','EWs','MeasredWave'],
delimiter=r'\s+'))
df = pd.concat(lst, ignore_index=True)

# Calculate the average based on the first column
df.groupby('wave').mean()
<小时/>

根据您的评论,您可以首先对 DataFrame 进行排序,以便首先出现最高的值,然后删除重复项,只留下每个唯一值的最高 STLines 值的行波浪。只需将循环更改为:

for filen in [x for x in os.listdir(path_to_files) if '.ares' in x]:
df1 = pd.read_table(path_to_files+filen, skiprows=0, usecols=(0,1,2,3,4,8),
names=['wave','num','stlines','fwhm','EWs','MeasredWave'],
delimiter=r'\s+'))
df1 = df1.sort_values('stlines', ascending=False).drop_duplicates('wave')
lst.append(df1)

关于python - 如何读取pandas中的多个表文件并取平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51635734/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com