我有一个这样的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 = [columns_names])
答案 0 :(得分:2)
首先将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()
答案 1 :(得分:0)
这应该可以解决问题:
df.set_index(pd.to_datetime(df.TIMESTAMP), inplace=True)
df = df.resample('20ms').ffill()