Как отформатировать январь-2018, т.е. как получить одногодичный формат в python - PullRequest
0 голосов
/ 14 октября 2018

Я пытаюсь изменить тип данных столбца в кадре данных pandas на datetype из строки.Мой обязательный формат - Mon-Year (например, январь-2018).Я попытался:

dataframe['date_col'] = pd.to_datetime(dataframe['date_col'], format='%b-%Y')

Я получил следующее предупреждение, и вывод, который я получаю, в формате год-месяц-день, что-то вроде (2018-01-01).

main : 1: SettingWithCopyWarning: значение пытается быть установлено для копии среза из DataFrame.Попробуйте использовать .loc [row_indexer, col_indexer] = значение вместо

См. Предостережения в документации: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

Как получить желаемый выходной формат, который является Jan-2018.

1 Ответ

0 голосов
/ 14 октября 2018

datetime значения не хранятся в виде строк!

Они хранятся внутри как целые числа, и должен быть полным: например, значение datetime должно включать день, месяци год.Поэтому вы должны выбрать один из следующих вариантов:

  1. Сохранить серию с datetime dtype и увидеть представление по умолчанию , то есть 2018-01-01, когда выотобразите или распечатайте серию.
  2. Сохраните серию с object dtype и выберите желаемое представление.

Есть no «промежуточные» опциичтобы получить лучшее из обоих миров.

Вариант 1: datetime

Просто используйте pd.to_datetime, как вы используете его сейчас.Вот демонстрация:

df = pd.DataFrame({'date_col': ['Jan-2018', 'Oct-2018', 'Dec-2018']})

df['date_col'] = pd.to_datetime(df['date_col'], format='%b-%Y')

print(df, df['date_col'].dtype)

    date_col
0 2018-01-01
1 2018-10-01
2 2018-12-01 datetime64[ns]

Вариант 2: object

Ну, это именно то, что вы используете в качестве ввода.Ничего не делать.Ваш ввод формат '%b-%Y' уже имеет вид 'Jan-2018'.

Примечание по SettingWithCopyWarning

Это предупреждение не имеет ничего общего с pd.to_datetime.По всей вероятности, ваш dataframe является неоднозначным фрагментом другого фрейма данных, и поэтому Pandas выдает предупреждение о том, что вы можете увидеть неожиданные результаты, если вы явно не скопируете фрейм данных.См. Также Как бороться с SettingWithCopyWarning в Pandas?

...