大家好,我是熊猫的新手,我有一个有数十万行的心电图信号,因为它每毫秒测量一次。因此我想修改数据以使其在几秒钟内完成并删除毫秒及其对应的 ECG 信号。
Time ECG1 ECG2
2020-10-09 15:55:49.004 -5.19 -5.19
2020-10-09 15:55:49.008 -5.19 -5.19
2020-10-09 15:55:49.012 -5.19 -5.19
首先我重新创建你的 df
d={'Time':['2020-10-09 15:55:49.004' , '2020-10-09 15:55:49.008', '2020-10-09 15:55:49.012' ] , 'ECG1':[-5.19 , -5.19 ,-5.19 ] , 'ECG2':[-5.19 ,-5.19 ,-5.19 ]}
df = pd.DataFrame(data=d)
然后我想要时间列的日期时间
df['Time'] = pd.to_datetime(df['Time'])
所以我可以使用 floor 方法来获得最多几分钟的时间
df['Time'] = df['Time'].dt.floor('s')
如果您有重复的行,您可以使用 drop_duplicates 方法删除它们
df.drop_duplicates(inplace=True)
你所描述的看起来像是一个重新采样的问题。重复数据删除,或者每秒只取最大值,不是我处理时间序列的方式。
下面我在 2 秒的时间间隔内创建了一系列包含 500 个数据点的数据。这将每 4 毫秒创建大约 1 个数据点。
现在可以使用resample()简单地移动到第二个间隔。
import pandas as pd
import numpy as np
# create dummy data
df= pd.DataFrame({'time': pd.date_range(start="1/1/2020 10:00:00", end="1/1/2020 10:00:02", periods=500)})
df['ECG1'] = np.array([[i]*100 for i in [5.19, 5.2, 5.21, 5.22, 5.23]]).flatten()
df['ECG2'] = df['ECG1']+0.1
print(df.head(5))
# resample to 1s intervalls, taking the mean over the 1-s period
new_df = df.set_index('time').resample("1s").mean()
print(new_df)
这产生:
time ECG1 ECG2
0 2020-01-01 10:00:00.000000000 5.19 5.29
1 2020-01-01 10:00:00.004008016 5.19 5.29
2 2020-01-01 10:00:00.008016032 5.19 5.29
3 2020-01-01 10:00:00.012024048 5.19 5.29
4 2020-01-01 10:00:00.016032064 5.19 5.29
ECG1 ECG2
time
2020-01-01 10:00:00 5.198000 5.298000
2020-01-01 10:00:01 5.221968 5.321968
2020-01-01 10:00:02 5.230000 5.330000