Pandas .rolling()函数丢失TimeStamp列,如何保留所有列?
Pandas rolling() 后保留TimeStamp列的解决方法
问题原因
rolling().mean()默认仅对数值类型列执行滑动窗口计算,你的TimeStamp列是字符串类型(未转为datetime时),不属于数值列,因此会被排除在计算结果之外。而官方示例中将时间戳设为索引,索引不会参与rolling的数值计算,所以能保留时间信息。
方案1:将TimeStamp设为索引(推荐,对齐官方示例逻辑)
先把TimeStamp转为datetime类型并设置为索引,执行rolling计算后索引会自动保留,若需要将其转回普通列,可重置索引。
import pandas as pd import numpy as np dictionary = {'TimeStamp': {0: '2023-02-23 08:01:50.701', 1: '2023-02-23 08:01:50.798', 2: '2023-02-23 08:01:50.798', 3: '2023-02-23 08:01:50.800', 4: '2023-02-23 08:01:50.800'}, 'Delta_TP9': {0: np.nan, 1: 0.8932789112449511, 2: 0.8932789112449511, 3: 0.8932789112449511, 4: 0.8932789112449511}, 'Delta_AF7': {0: np.nan, 1: -0.062321571240896, 2: -0.0734485722420289, 3: -0.0734485722420289, 4: -0.0734485722420289}} df = pd.DataFrame.from_dict(dictionary) # 转换TimeStamp为datetime类型并设为索引 df['TimeStamp'] = pd.to_datetime(df['TimeStamp']) df = df.set_index('TimeStamp') # 执行滑动窗口计算,索引自动保留 rolling_result = df.rolling(3).mean() # 可选:将TimeStamp转回普通列 rolling_result = rolling_result.reset_index() print(rolling_result)
方案2:手动合并TimeStamp列到结果
如果不想修改索引,可以单独提取TimeStamp列,再与rolling计算结果按索引拼接。
import pandas as pd import numpy as np dictionary = {'TimeStamp': {0: '2023-02-23 08:01:50.701', 1: '2023-02-23 08:01:50.798', 2: '2023-02-23 08:01:50.798', 3: '2023-02-23 08:01:50.800', 4: '2023-02-23 08:01:50.800'}, 'Delta_TP9': {0: np.nan, 1: 0.8932789112449511, 2: 0.8932789112449511, 3: 0.8932789112449511, 4: 0.8932789112449511}, 'Delta_AF7': {0: np.nan, 1: -0.062321571240896, 2: -0.0734485722420289, 3: -0.0734485722420289, 4: -0.0734485722420289}} df = pd.DataFrame.from_dict(dictionary) # 单独提取TimeStamp列 time_col = df[['TimeStamp']] # 执行滑动窗口计算 rolling_result = df.rolling(3).mean() # 按索引合并两部分 final_result = pd.concat([time_col, rolling_result], axis=1) print(final_result)
内容的提问来源于stack exchange,提问作者tom
相关产品推荐
相关产品推荐

