Я пытаюсь изменить тип данных столбца в кадре данных pandas на тип даты из строки. Мой требуемый формат - понедельник-год (например, январь-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
Как получить выходной формат, который я хочу, это январь 2018 года.
Ответ 1 · jpp
datetime значения не хранятся в виде строк!
Они хранятся внутри как целые числа и должны быть полными: например, значение datetime должно включать день, месяц и год. Поэтому вы должны выбрать один из следующих вариантов:
- Сохраните свою серию с
datetime dtype и просматривайте представление по умолчанию, т. е. 2018-01-01, когда вы отображаете или печатаете серию.
- Сохраните свою серию с
object dtype и выберите представление по вашему выбору.
Не существует никаких "промежуточных" вариантов, позволяющих получить лучшее из обоих миров.
Вариант 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'.
Примечание по настройкеWithCopyWarning
Это предупреждение не имеет ничего общего с pd.to_datetime. По всей вероятности, ваш dataframe является неоднозначным фрагментом другого фрейма данных, и поэтому Pandas показывает предупреждение о том, что вы можете увидеть неожиданные результаты, если вы явно не скопируете фрейм данных. См. также Как бороться с SettingWithCopyWarning в Pandas?