pd.to_datetime不遵守格式

时间:2018-09-20 01:23:12

标签: python datetime time-series

我有以下数据框:

    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 :(得分:2)

这是熊猫日期时间的格式。如果需要,可以使用dt.strftime

转换该日期时间格式
df['month'] = df['month'].dt.strftime('%Y/%m')

或者您可以采用一种更简单的方法开始并仅使用映射功能,而无需涉及日期时间格式

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

答案 1 :(得分: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会指出)。但是,当显示时,pandas会将其显示为完整日期(这就是为什么您看到“日期”字段的原因)。正如@sds指出的那样,如果您只想将破折号切换为斜杠,那么您可以操纵原始字符串以产生新的字符串('month_new_str2')。