Использовать Pandas для интерполяции и хранить данные временных рядов с меткой времени вместо строки datetime?

#python #pandas #dataframe

#python #pandas #dataframe

Вопрос:

У меня есть фрейм данных Pandas, который включает столбец timestamp, начинающийся с 0.

Первая строка всегда начинается с time = 0, а следующие строки получают относительное время с этой точки. Итак, например, вторая строка появляется через 0,25 секунды после первой, очевидно, что она получает метку времени 0,25.

Я хочу использовать столбец timestamp главным образом для возможности повторной выборки и интерполяции. Итак, насколько я знаю, для этой цели это должен быть какой-то связанный со временем dtype ( pd.Timestamp в моем случае).

Теперь, чего я дополнительно хочу, это иметь возможность впоследствии сохранять фрейм данных в виде CSV-файла. К сожалению, pd.Timestamp столбец хранится как строка datetime формата

 1970-01-01 00:00:00.000000000
  

Однако я хотел бы сохранить его таким, как оно есть: в виде значения с плавающей точкой, начиная с 0.0.

Я подумываю о сохранении метки времени в dataframe в виде двух отдельных столбцов, один в pd.Timestamp формате, а другой с тем же исходным значением, что и float .

Хотя, кроме того, значения данных, плавающие во фрейме, хранятся в формате %7.3f . Однако значение с плавающей точкой метки времени должно быть более точным, скорее что-то вроде %.6f или даже больше десятичных цифр. Итак, мне в дополнение ко всему вышесказанному нужен другой формат float для одного столбца.

Как я могу сделать все это вместе?

Комментарии:

1. Почему бы не сохранить как файл pickle? Другой альтернативой является создание функции для чтения и записи ваших файлов, при записи преобразующей вашу временную метку в float, а при чтении преобразующей float в timestamp.

2. Потому что я сохраняю это для другой программы, которая требует формат CSV (или, скорее, TSV, если быть более точным). И у Pandas уже есть эта функция для чтения / записи CSV.

Ответ №1:

Для меня ваше время больше похоже на Timedelta s. Вы можете инициализировать их как 0, сложить их вместе, а затем представить их в виде числа с плавающей точкой с pd.Timedelta.total_seconds() .

 import pandas as pd
t0 = pd.Timedelta(0)
t1 = t0   pd.Timedelta('0.25s')

t1_as_float = t1.total_seconds()
  

Комментарии:

1. Возможно, да, но у меня уже есть метки в виде абсолютных значений с плавающей точкой. Я сохраняю первую поступающую метку и вычитаю ее из следующих меток, чтобы первая была равна 0, а следующая — «с этого момента». Впоследствии я преобразовываю их в pd.Timestamp , чтобы иметь возможность выполнять повторную выборку в Dataframe.