将文件夹子子文件夹中csv数据,按照每一列进行时域同步平均(TSA)处理,其中时域同步平均(TSA)处理的窗口可定义,变换后的数据写入新的csv中,以tsa后缀命名。
时间: 2024-04-15 13:28:54 浏览: 93
以下是按列进行时域同步平均(TSA)处理的代码示例:
```python
import os
import csv
def perform_t_transform(input_csv_file,sa_window_size):
output_csv_file = input_csv_file.replace(".csv", "_tsa.csv")
with open(input_csv_file, "r") as input_file, open(output_csv_file, "", newline="") as output_file:
csv_reader = csv.reader(input_file)
csv = csv.writer(output_file)
data_columns = []
column_headers = next(csv_reader) # 获取列标题
# 确定需要进行TSA处理的列
for i, header in enumerate(column_headers):
if header.lower().startswith("column"): # 列标题以"column"开头
data_columns.append(i)
# 写入新的CSV文件标题行
tsa_column_headers = [column_headers[col] for col in data_columns]
csv_writer.writerow(tsa_column_headers)
data = [[] for _ in data_columns] # 存储每一列的数据
for row in csv_reader:
for i, col in enumerate(data_columns):
data[i].append(float(row[col]))
if len(data[0]) == tsa_window_size:
transformed_data = perform_tsa_transform_window(data)
csv_writer.writerow(transformed_data)
for i in range(len(data)):
data[i].pop(0)
def perform_tsa_transform_window(data):
transformed_data = []
for i in range(len(data[0])):
window_data = [data[j][i] for j in range(len(data))]
transformed_data.append(sum(window_data) / len(window_data))
return transformed_data
def process_csv_files(folder_path, tsa_window_size):
for root, dirs, files in os.walk(folder_path):
for file in files:
if file.endswith(".csv"):
file_path = os.path.join(root, file)
perform_tsa_transform(file_path, tsa_window_size)
# 指定文件夹路径和TSA窗口大小进行调用
process_csv_files("your_folder_path", 3)
```
请将代码中的 `"your_folder_path"` 替换为您的文件夹路径,并根据需要调整 `tsa_window_size` 的值。
上述代码会遍历指定的文件夹及其子文件夹中的所有 CSV 文件,并针对每个文件按列进行时域同步平均(TSA)处理。处理后的数据将写入新的 CSV 文件中,以 "_tsa" 后缀命名。
在 `perform_tsa_transform` 函数中,我们首先确定需要进行 TSA 处理的列,然后按照指定的窗口大小对每一列的数据进行 TSA 处理。处理后的数据将写入新的 CSV 文件,并保留与原始文件相同的列标题。
您可以根据需要调整 `tsa_window_size` 的值来定义 TSA 的窗口大小。
阅读全文
相关推荐














