我正在尝试将pandas数据框中的列的数据类型从字符串更改为datetype。我需要的格式是“每年一月”(例如:2018年1月)。我尝试过:
dataframe['date_col'] = pd.to_datetime(dataframe['date_col'], format='%b-%Y')
我收到以下警告,并且输出的格式为年-月-日,类似于(2018-01-01)。
主要:1:SettingWithCopyWarning:试图在DataFrame的切片副本上设置一个值。尝试使用 .loc [row_indexer,col_indexer] =值
请参阅文档中的警告: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
如何获取我想要的输出格式,即2018年1月。
答案 0 :(得分:0)
datetime
值不存储为字符串!它们在内部存储为整数,并且必须是完整的:例如,datetime
值必须包含日,月和年。因此,您必须选择以下一项:
datetime
dtype存储系列,并在显示或打印系列时查看默认表示形式,即2018-01-01
。object
dtype存储系列,然后选择所需的表示形式。没有没有的“中介”选项可以同时兼顾两个方面。
选项1:datetime
只需使用pd.to_datetime
,就像现在一样使用它。这是一个演示:
df = pd.DataFrame({'date_col': ['Jan-2018', 'Oct-2018', 'Dec-2018']})
df['date_col'] = pd.to_datetime(df['date_col'], format='%b-%Y')
print(df, df['date_col'].dtype)
date_col
0 2018-01-01
1 2018-10-01
2 2018-12-01 datetime64[ns]
选项2:object
好吧,这正是您输入的内容。没做什么。您的输入格式'%b-%Y'
的格式为'Jan-2018'
。
此警告与pd.to_datetime
无关。您的dataframe
很可能是另一个数据帧的过渡片段,因此Pandas显示警告,如果您未明确复制数据帧,则可能会看到意外的结果。另请参见How to deal with SettingWithCopyWarning in Pandas?