pd.to_datetime не поддерживает формат

1

У меня есть следующий фреймворк:

    month     value
0   1949-01    3
1   1949-02    4
2   1949-03    5

df['month'] = pd.to_datetime(df['month'], format= '%Y/%m')

Я хотел бы получить месяц в следующем формате:

 1949/01

Но вывод всегда таков:

   month        value
0   1949-01-01    3
1   1949-02-01    4
2   1949-03-01    5

Почему он автоматически добавляет день и не поддерживает формат?

  • 0
    Параметр format параметре to_datetime указывает только формат ввода . Объекты Pandas Timestamp не хранят информацию о том, как выходные данные должны быть отформатированы. Вы должны были бы сделать это вручную согласно ответу sds.
Теги:
datetime
time-series

2 ответа

2
Лучший ответ

Это формат, с которым работает pandas datetime. Если вы хотите, вы можете преобразовать формат datetime, используя dt.strftime

df['month'] = df['month'].dt.strftime('%Y/%m')

Или вы можете использовать более простой подход для начала и просто использовать функцию сопоставления, не нужно ввязываться в форматы datetime

df['month'] = df['month'].map(lambda x: x.replace('-', '/'))
0

Я думаю, вы запутываете, как хранится информация ("dtype") и как она отображается вам. Пример приведенного ниже примера иллюстрирует это:

import pandas as pd

# create sample dataframe where month is a string
df = pd.DataFrame({'month_str':['1949-01', '1949-02', '1949-03']})

# now create a new column where you have converted the string to a datetime
df['month_datetime'] = pd.to_datetime(df['month_str'])

# now convert the datetime back to a string with your desired format
df['month_new_str'] = df['month_datetime'].dt.strftime('%Y/%m')

# skip all the fooling around with datetimes and just manipulate it as a string directly

df['month_new_str2'] = df['month_str'].apply(lambda x: x.replace('-', '/'))

print(df.dtypes)
print(df)

Это приводит к следующему результату:

month_str                 object
month_datetime    datetime64[ns]
month_new_str             object
month_new_str2            object
dtype: object
  month_str month_datetime month_new_str month_new_str2
0   1949-01     1949-01-01       1949/01        1949/01
1   1949-02     1949-02-01       1949/02        1949/02
2   1949-03     1949-03-01       1949/03        1949/03

Обратите внимание, что исходный столбец "month_str" имеет dtype объекта (это строка). Когда вы вызывали to_datetime, мы преобразовали его в тип datetime (нет необходимости указывать формат, pandas показывает его). Но когда отображается, панды показывают его как полную дату (именно поэтому вы видите поле дня). Как указывает @sds, если вы просто хотите отключить черту для косой черты, вы можете просто манипулировать исходной строкой для создания новой строки ('month_new_str2').

Ещё вопросы

Сообщество Overcoder
Наверх
Меню