#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.