在 Python 中处理大量 csv 文件中的数据

问题描述 投票:0回答:1

我有 101 个 .csv 文件,每个文件有 10001 对值(图中此类文件的一个示例是频谱功率密度对频率的依赖性 - Example)。我需要以某种方式对每个文件中第二列的值进行平方,然后对这些值进行平均(平均发生在一行号的值之间。即,我们从所有 101 个文件中获取一行第二列的平方值,对它们进行平均,换句话说,依赖性应该在光谱功率密度上进行平均)。

如何实现这一点?

到目前为止,我只能处理一个文件,同时,一个文件的依赖关系图(没有平方)看起来就像一场噩梦。

import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv(r'C:\Users\Den\Desktop\SPD\tek0000MTH.csv', sep = ';')


x = data['W'].to_numpy()
y = data['S'].to_numpy()

plt.xlabel('w') 
plt.ylabel('S') 
plt.title('SPD') 
plt.plot(x, y)
plt.grid() 
plt.show()

Plot

同时,我无法想象如何执行上述所有任务,例如平方和平均,同时处理 101 个文件。

python pandas csv
1个回答
0
投票
import os
import pandas as pd
csv_folder = r"/home/bera/Desktop/gistest/csvs/" #The folder with the 102 csv files

#Find and create a dataframe of each csv file
frame_list = []
for root, folder, files in os.walk(csv_folder):
    for file in files:
        if file.endswith("csv"):
            fullname = os.path.join(root, file)
            df = pd.read_csv(fullname, sep=";")
            df["filename"] = file
            frame_list.append(df) #Store the filename as a value
print(len(frame_list))
#102

megaframe = pd.concat(frame_list, axis=0) #Concatenate the 102 frames into one
print(megaframe.shape)
#(1020000, 3)

print(megaframe.sample(3))
#                  w         s     filename
# 3940    884.419539  0.018198  file_93.csv
# 6314   1526.922029  0.013237   file_4.csv
# 3322  18177.653004  0.003916  file_51.csv

megaframe["s_sq"] = megaframe["s"]**2
df_means = megaframe.groupby("filename", as_index=False)["s_sq"].mean()
print(df_means.head())
#        filename      s_sq
# 0    file_0.csv  0.000134
# 1    file_1.csv  0.000135
# 2   file_10.csv  0.000132
# 3  file_100.csv  0.000135
# 4  file_101.csv  0.000132
© www.soinside.com 2019 - 2024. All rights reserved.