如何使用时间戳对 Pandas DataFrame 进行上采样

How to Upsample Pandas DataFrame using Timestamp

我有一个这样的 DataFrame(不关心 NaN 值):

我想每 20 毫秒对它进行一次上采样。

我做的是:

df = df.set_index('TIMESTAMP')
df = df.resample('20ms').ffill()

但我收到错误:

Traceback (most recent call last):
sens_encoded = sens_encoded.resample('20ms').ffill()
TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Index'

所以我尝试将TIMESTAMP转换为DateTime,应该已经是:

df = df.set_index('TIMESTAMP')
df.index = pd.to_datetime(df.index)   //Added this
df = df.resample('20ms').ffill()

但我收到错误:

Traceback (most recent call last):
df.index = pd.to_datetime(df.index)
TypeError: <class 'tuple'> is not convertible to datetime

编辑:

我认为问题可能出在 set_index('TIMESTAMP') 之后,数据框看起来像这样(注意时间戳值中的括号):

EDIT2:

我发现了为什么我在 df 中得到那些括号。 这是因为我在创建它时将列名称分配为方括号内的列表。正确的做法是:

columns_names = ['D07', 'C10', ...]
df = pd.DataFrame(columns=columns_names)

df = pd.DataFrame(列=[columns_names])

这应该可以解决问题:

df.set_index(pd.to_datetime(df.TIMESTAMP), inplace=True)
df = df.resample('20ms').ffill()

首先将 MultiIndex 的第一级设置为列,以删除损坏的一级 MultiIndex

添加参数 errors='coerce' 以将不可解析的值转换为 NaT 如果需要,也可以先转换列,然后创建 DatetimeIndex 和最后一个 upsample:

df.columns = df.columns.get_level_values(0)

df['TIMESTAMP'] = pd.to_datetime(df['TIMESTAMP'], errors='coerce')
df = df.set_index('TIMESTAMP').resample('20ms').ffill()

或者:

df.columns = df.columns.get_level_values(0)

df = df.set_index('TIMESTAMP')
df.index = pd.to_datetime(df.index, errors='coerce')
df = df.resample('20ms').ffill()