我有以下数据框:
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 :(得分: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')。