Преобразование даты и времени в другой формат без изменения dtype - PullRequest
0 голосов
/ 26 августа 2018

Я только изучаю панд и сам столкнулся с несколькими проблемами.

  1. В DataFrame, который был прочитан из файла CSV, у меня есть один столбец, содержащий данные даты, которыев другом формате (например, '%m/%d/%Y' и '%Y-%m-%d', может быть пустым.) и я хочу унифицировать формат этого столбца.Но я не знаю, есть ли другие форматы.Поэтому, когда я использовал pd.to_datetime(), это вызывало некоторые ошибки, такие как несоответствие формата и несоответствие времени.Как я могу унифицировать формат этого столбца?

  2. Я преобразовал часть этого столбца в datetime dtype, и он в формате YYYY-mm-dd.Могу ли я сохранить тип даты и времени и изменить формат на '%m/%d/%Y'?Я использовал pd.dt.strftime(), он изменит формат, но также изменит dtype на str, не сохраняя тип datetime.

1 Ответ

0 голосов
/ 26 августа 2018

Так что, когда я использовал pd.to_datetime (), возникли некоторые ошибки, такие как несоответствие формата и не похожие на время данные.Как можно унифицировать формат этого столбца?

Используйте параметр errors='coerce', чтобы вернуть NaT (не время) для не преобразованных значений.Также обратите внимание, что аргумент format не требуется.Отказ от этого позволит Пандам попробовать несколько форматов, в противном случае он вернется к NaT 1 .Например:

df['datetime'] = pd.to_datetime(df['datetime'], errors='coerce')

Осторожно, смешанные типы могут интерпретироваться неправильно.Например, как Python узнает, будет ли 05/06/2018 5 июня или 6 мая?Будет применен порядок соглашений, и если вам нужен больший контроль, вам нужно будет применить индивидуальный заказ самостоятельно.

Могу ли я сохранить тип d datetime и изменить формат на '% m /% d/% Y '?

Нет, вы не можете.datetime ряды хранятся внутри как целые числа.Любое удобочитаемое представление даты - это просто представление , а не базовое целое число.Чтобы получить доступ к вашему пользовательскому форматированию, вы можете использовать методы, доступные в Pandas.Вы даже можете сохранить такое текстовое представление в переменной pd.Series:

formatted_dates = df['datetime'].dt.strftime('%m/%d/%Y')

dtype из formatted_dates будет object, что указывает на то, что элементы вашей серии указывают на произвольный Pythonраз.В этом случае эти произвольные типы являются всеми строками.

Наконец, я настоятельно рекомендую вам , а не преобразовать серию datetime в строки до самого последнего шага в вашем рабочем процессе.Это связано с тем, что, как только вы это сделаете, вы больше не сможете использовать эффективные векторизованные операции для такой серии.


1 Это приведет к снижению производительности и контрастированию сdatetime.strptime, для которого требуется указать формат .Внутри Pandas использует библиотеку dateutil, как указано в документах .

...