将文件夹子子文件夹中csv数据,按照每一列进行时EMD分解处理,把原始信号分解出三个IMF,处理好的数据写入新csv中的每一列。原数据每一列写到csv不同sheet里
时间: 2024-04-15 07:31:20 浏览: 166
了解了您的需求。下面是一个修改后的代码示例,可以将文件夹及其子文件夹中的 CSV 数据按列进行时域经验模态分解(EMD),然后将处理后的数据分别写入到新的 CSV 文件的不同工作表中。
```python
import os
import pandas as pd
from pyhht.emd import EMD
def emd_processing(input_folder, output_file):
# 获取文件夹及其子文件夹中的所有 CSV 文件路径
csv_files = []
for root, dirs, files in os.walk(input_folder):
for file in files:
if file.endswith(".csv"):
csv_files.append(os.path.join(root, file))
# 创建一个字典,用于存储每个列的处理结果
processed_data = {}
# 遍历所有 CSV 文件
for file_path in csv_files:
# 读取 CSV 文件
df = pd.read_csv(file_path)
# 对每一列进行 EMD 分解处理
for column in df.columns:
column_data = df[column]
emd = EMD()
imfs = emd(column_data)
# 将分解后的 IMF 数据存储到字典中
for i, imf in enumerate(imfs):
new_column_name = f"{column}_IMF{i+1}"
if new_column_name not in processed_data:
processed_data[new_column_name] = []
processed_data[new_column_name].extend(imf)
# 将处理后的数据写入新的 CSV 文件的不同工作表中
with pd.ExcelWriter(output_file) as writer:
for column_name, column_data in processed_data.items():
df = pd.DataFrame({column_name: column_data})
df.to_excel(writer, sheet_name=column_name, index=False)
# 设置输入和输出路径
input_folder = os.path.join(currentPath, 'csv')
output_file = os.path.join(currentPath, 'output.xlsx')
# 调用 emd_processing 函数处理数据
emd_processing(input_folder, output_file)
```
在上述代码中,我使用了 `pandas` 库来读取和写入 CSV 文件,以及创建 Excel 文件的不同工作表。对于每个 CSV 文件的每一列,我将其进行 EMD 分解处理,并将分解后的 IMF 数据存储到一个字典中。然后,我使用 `pd.ExcelWriter` 来创建一个 Excel 文件,并将每个列的数据写入到不同的工作表中。
请确保您已经安装了必要的依赖库 `pandas` 和 `pyhht`,可以通过 `pip install pandas pyhht` 命令进行安装。
希望这次能满足您的需求。如果有任何问题,请随时提问。
阅读全文