У меня есть фрейм данных, df с индексом: pd.DatetimeIndex .Отдельные временные метки изменяются с 2017-12-04 08:42:12.173645000
на 2017-12-04 08:42:12
с помощью превосходной команды округления панд:
df.index = df.index.round("S")
При сохранении в csv этот формат сохраняется (это именно то, что я хочу).Мне также нужен столбец только для даты, и теперь его легко создать:
df = df.assign(DateTimeDay = df.index.round("D"))
При сохранении в csv-файле с использованием df.to_csv()
, это записывает всю метку времени (2017-12-04 00:00:00
), за исключением случаев, когда сохраняется ТОЛЬКО столбец .Итак, я добавляю следующую команду перед сохранением:
df["DateTimeDay"] = df["DateTimeDay"].dt.date
... и csv-файл снова выглядит красиво (2017-12-04
)
Описание проблемы
Теперь перейдем к вопросу, у меня есть два других столбца с метками времени того же формата, что и выше (но разные - И - с очень небольшим количеством NaN).Я также хочу округлить их до секунд (оставив, конечно, NaN как NaN), а затем убедиться, что при записи в csv они не дополняются нулями "ниже второго разрешения".Что бы я ни пытался, я просто не могу этого сделать.
Дополнительная информация:
print(df.dtypes)
print(df.index.dtype)
... все результаты в datetime64[ns]
.Если я преобразую их в индекс:
df["TimeCol2"] = pd.DatetimeIndex(df["TimeCol2"]).round("s")
df["TimeCol3"] = pd.DatetimeIndex(df["TimeCol3"]).round("s")
... это работает, но csv-файл все еще дополняет их нежелательными и ненужными нулями.
Оптимальное решение : Преобразование столбцов (как указано выше) или поэлементное использование не применимо, если они не быстрые (более 100 миллионов строк).Команда моей мечты была бы такой:
df["TimeCol2"] = df["TimeCol2"].round("s") # Raises TypeError: an integer is required (got type str)