#pandas #dataframe #csv
Вопрос:
Прежде чем я буду писать в csv-файл, у меня есть столбец времени в виде:
time datetime64[ns, Europe/Berlin]
Когда я читаю df из csv, я получаю:
time object
Как записать и прочитать столбцы времени того же типа, что и до процесса сохранения?
Для процесса написания у меня есть:
df = df.astype({'time':'datetime64[ns]'}) mytz = get_localzone() df['time'] = pd.to_datetime(df['time'] , unit='ms').dt.tz_localize('UTC').dt.tz_convert(mytz)
Как мне написать в scv?
df.to_csv('test.csv' , index=False)
Как мне прочитать csv?
df = pd.read_csv('test.csv')
И колонка времени выглядит так:
0 2021-09-20 00:00:00 02:00 1 2021-09-20 01:00:00 02:00
Комментарии:
1. просто , но сложно.
2. Вам нужно отделить часовой пояс, если вы хотите сохранить «Европа/Берлин». 01:00 может привести ко многим другим странам Европы или Африки. Или вы хотели бы написать формат даты с аббревиатурой TZ в формате csv?
3. Вам не нужно
pd.to_datetime
после того, как вы прочитаете. Если у вас есть 01:00 в вашем csv,parse_dates
вы уже преобразуете столбец в дату и время с учетом tz. Попробуйте распечататьpd.read_csv('test.csv', parse_dates=['time']).info()
Это должно иметь время с учетом tz по смещению, а не по локали. Это нормально, что вы теряете информацию о локали?4. Я получил ответ: время 1440 ненулевой объект
5. Не могли бы вы поделиться строкой
to_csv
, а затем, какой формат даты теперь записан в csv?
Ответ №1:
Для этого я бы использовал pd.to_pickle(path)
и pd.read_pickle(path)
, поскольку csv на самом деле не может хранить ничего, кроме строк и чисел. С помощью pickle он сериализует весь фрейм данных и сохраняет его так, как если бы вы только что напрямую загрузили объект python в файл и наоборот.