pd.to_datetime не поддерживает формат - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть следующий фрейм данных:

    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

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

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Я думаю, вы путаете, как хранится информация (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' имеет объект типа d (это строка),Когда вы вызывали to_datetime, мы конвертировали его в тип datetime (указывать формат не нужно, панды это выясняют).Но когда он отображается, pandas отображает его как полную дату (вот почему вы видите поле дня).Как указывает @sds, если вы просто хотите отключить тире для косой черты, вы можете просто манипулировать исходной строкой, чтобы создать новую строку ('month_new_str2').

0 голосов
/ 20 сентября 2018

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

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

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

df['month'] = df['month'].map(lambda x: x.replace('-', '/'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...