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

标签 python pandas

这就是两个表的样子

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/

相关文章:

python - 1241, 'Operand should contain 1 column(s)' Pandas to_sql

python - 在 Numpy 中转置一维数组而不转换为矩阵

python - 通过使用 numpy 平均相邻值来减小数组大小

python - 从文本字符串创建表/csv

python - 使用 groupby 过滤重复值

python - 如何将列表值与不完全相等的数据框列进行比较?

python - 输出列表中的所有负数

python - 计算 Pandas 数据框中单词的频率

python - Pandas 搜索速度/性能/效率

python-3.x - 使用 pandas 数据帧系列中的逗号分隔值