#python
#小波降噪
用python对.csv数据文件进行小波降噪,发现这一行代码最终只对第11列数据生效了,range(1, 11)中11改成几就只对那一列数据生效,其他列没有变化,第一次接触实在搞不懂,求指点一下。
按一列的值进行筛选,比如筛选四年级的所有学生的分数
df = data.loc[data['年级']== 4 ]
按两列值进行筛选
df4 = df.loc[(df['策略类别'] == "A" )&(df['语文类别'] == "B" )]
对于小波降噪中只有第11列受到影响的问题,可以检查一下循环中是否有对应的变量只使用了11,而未使用循环变量等可能原因。另外,可以尝试将小波变换和逆变换的过程分别写在不同的函数中,然后调用这些函数来实现对所有列的处理。
import pywt
import pandas as pd
# 定义小波变换函数
def wavelet_transform(data):
wavelet = 'sym5'
cA, cD = pywt.dwt(data, wavelet)
return cA, cD
# 定义逆变换函数
def inverse_wavelet_transform(cA, cD, wavelet):
data = pywt.idwt(cA, cD, wavelet)
return data
# 读取csv文件
data = pd.read_csv('data.csv')
# 使用循环对每一列进行处理
for i in range(1, len(data.columns)):
column_name = data.columns[i]
cA, cD = wavelet_transform(data[column_name].tolist())
reconstructed_data = inverse_wavelet_transform(cA, cD, 'sym5')
data[column_name] = reconstructed_data.tolist()
# 保存结果到新的csv文件中
data.to_csv('processed_data.csv', index=False)
对于计算一段时间内所有跑道的平均速度,可以先读取文件1(data.csv)中的开始时间和结束时间,再根据这个时间段,去对应的多个文件中读取对应时刻的速度数据。最后,将所有速度数据求平均,并添加到另外一个文件的新增列中。
```python import os import datetime import csv
with open('data.csv', 'r') as f: reader = csv.reader(f) start_time_str, end_time_str = next(reader)[1:]
start_time = datetime.datetime.strptime(start_time_str, '%Y-%m-%d %H:%M:%S') end_time = datetime.datetime.strptime(end_time_str, '%Y-%m-%d %H:%M:%S')
speed_data = [] file_names = os.listdir('./') for file_name in file_names: if file_name.startswith('1') or file_name.startswith('2'): with open(file_name, 'r') as f: reader = csv.reader(f) next(reader) for row in reader: time_str, speed_str = row # 将时间字符串转化为datetime对象 time = datetime.datetime.strptime(time_str, '%Y-%m-%d %H:%M:%S') \ if '-' in time_str else datetime.datetime.strptime(time_str, '%Y/%m/%d %H:%M:%S')