В моем фрейме данных есть DOB
столбец (примерный формат 1/1/2016
), который по умолчанию преобразуется в pandas dtype 'object':DOB object
Преобразование это формат даты с df['DOB'] = pd.to_datetime(df['DOB'])
, дата преобразуется в: 2016-01-26
и его dtype
является: DOB datetime64[ns]
.
Теперь я хочу преобразовать этот формат даты 01/26/2016
в любой другой общий формат даты или в любой другой. Как мне это сделать?
Какой бы метод я ни пробовал, он всегда показывает дату в 2016-01-26
формате.
Ответы:
Вы можете использовать,
dt.strftime
если вам нужно преобразоватьdatetime
в другие форматы (но обратите внимание, что тогдаdtype
столбец будетobject
(string
)):источник
.merge
столбца datetime другого фрейма данных? Имеет ли смысл преобразовывать другой столбец datetime в столбец объекта, чтобы сделать это.merge
?.merge
можно сделать правильно, если оба столбца являются столбцами даты и времени, даже если они не имеют точно такого же формата. Это правильно?Изменение формата, но без изменения типа:
источник
date
столбце - « 26 ноября 2019 года».strftime()
означает «строка от времени» , поэтомуdf["date"].dt.strftime('%Y-%m')
будет строка"2019-11"
для этого элемента. Затемpd.to_datetime()
преобразует эту строку обратно вdatetime64
формат, но теперь как « 1 ноября 2019 г.»! Таким образом, результат будет: Никакого изменения формата, а изменение самого значения даты!Приведенный ниже код работал у меня вместо предыдущего - попробуйте!
источник
format='%m/%d/%Y'
параметр предназначен для синтаксического анализа строки, т.е. вы должны предоставить строку в таком формате (например,"5/13/2019"
). Больше ничего, без смены формата. Он по-прежнему будет отображаться как2019-05-13
- или вызовет исключение, если онdf['DOB'].astype(str)
содержит элемент (ы) не в таком формате, например, в формате"2019-05-13"
.По сравнению с первым ответом я рекомендую сначала использовать dt.strftime (), а затем pd.to_datetime (). Таким образом, он по-прежнему будет иметь тип данных datetime.
Например,
источник
Вы можете попробовать это, он преобразует формат даты в ДД-ММ-ГГГГ:
источник
dayfirst=True
это всего лишь спецификация порядка синтаксического анализа даты, например, эта амбивалентная строка даты как «2-1-2019» будет анализироваться как 2 января 2019 года, а не как 1 февраля 2019 года. Ничего более, никаких изменений для форматирования вывода .Есть разница между
Возникает вопрос: как достичь надлежащего представления моих данных без изменения самих данных / типов данных?
Вот ответ:
id
иclass
атрибутов для дальнейшего моделирования CSS - вы можете или не можете их использовать),использовать укладку . Стилизация не меняет данные / типы данных столбцов вашего фрейма данных.
Теперь я покажу вам, как добраться до него в записной книжке Jupyter - для презентации в виде файла HTML см. Примечание в конце вопроса.
Я предполагаю, что в вашей колонке
DOB
уже есть типdatetime64
(вы показали, что знаете, как до него добраться). Я подготовил простой фрейм данных (только с одним столбцом), чтобы показать вам базовый стиль:Не стилизован:
Стиль его как
mm/dd/yyyy
:Стиль его как
dd-mm-yyyy
:Быть осторожен!
Возвращаемый объект НЕ является фреймом данных - это объект класса
Styler
, поэтому не назначайте его обратноdf
:Не делайте этого:
(Каждый фрейм данных имеет свой объект Styler, доступный через его
.style
свойство, и мы изменили этотdf.style
объект, а не сам фрейм данных.)Вопросы и ответы:
В: Почему ваш объект Styler (или возвращающее его выражение), используемый в качестве последней команды в ячейке записной книжки Jupyter, отображает вашу (стилизованную) таблицу , а не сам объект Styler?
A: Потому что каждый объект Styler имеет метод обратного вызова,
._repr_html_()
который возвращает HTML-код для рендеринга вашего фрейма данных (в виде красивой HTML-таблицы).Jupyter Notebook IDE автоматически вызывает этот метод для визуализации объектов, в которых он есть.
Примечание:
Записная книжка Jupyter не нужна для стилизации (т.е. для хорошего вывода фрейма данных без изменения его данных / типов данных ).
У объекта Styler также есть метод
render()
, если вы хотите получить строку с кодом HTML (например, для публикации вашего отформатированного фрейма данных в Интернете или просто представить вашу таблицу в формате HTML):источник
if
оператора, известного каждому программисту? - Несмотря на это, спасибо за комментарий, некоторым людям он может быть полезен.pd.to_datetime()
него есть аргументыerrors='raise'/'coerce'/'ignore', dayfirst, yearfirst, utc, exact
для управления тем, насколько он точен и благоприятен для исключений, и будут ли принудительно выполняться недопустимые выходные данныеNaT
или что. Что делает его более сложным в «реальных» наборах данных, так это смешанные / отсутствующие / неполные форматы, время, часовые пояса и т. Д .; исключения не обязательно плохие.Ниже код изменяется на тип datetime, а также форматируется в заданной строке формата. Работает хорошо!
источник
df['DOB']=pd.to_datetime(df['DOB']).dt.strftime('%m/%d/%Y')