Как обновить Pandas DataFrame, используя метку времени - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть DataFrame, подобный этому (меня не интересуют значения NaN):

enter image description here

И я хотел бы увеличивать его каждые 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'), кадр данных выглядитвот так (обратите внимание на круглые скобки в значениях меток времени):

enter image description here

EDIT2 :

Я узналпочему я получил эти скобки в DF.Это было потому, что я создавал его, назначая имена столбцов в виде списка в квадратных скобках.Правильный способ сделать это:

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

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

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Сначала установите первый уровень 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()
0 голосов
/ 18 ноября 2018

Это должно сработать:

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