我有 101 个 .csv 文件,每个文件有 10001 对值(图中此类文件的一个示例是频谱功率密度对频率的依赖性 - )。我需要以某种方式对每个文件中第二列的值进行平方,然后对这些值进行平均(平均发生在一行号的值之间。即,我们从所有 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()
同时,我无法想象如何执行上述所有任务,例如平方和平均,同时处理 101 个文件。
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