У меня есть следующий фреймворк:
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
Почему он автоматически добавляет день и не поддерживает формат?
Это формат, с которым работает pandas datetime. Если вы хотите, вы можете преобразовать формат datetime, используя dt.strftime
df['month'] = df['month'].dt.strftime('%Y/%m')
Или вы можете использовать более простой подход для начала и просто использовать функцию сопоставления, не нужно ввязываться в форматы datetime
df['month'] = df['month'].map(lambda x: x.replace('-', '/'))
Я думаю, вы запутываете, как хранится информация ("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').
format
параметреto_datetime
указывает только формат ввода . Объекты Pandas Timestamp не хранят информацию о том, как выходные данные должны быть отформатированы. Вы должны были бы сделать это вручную согласно ответу sds.