如何使用pandas检查是否有任何列是datetime数据类型列,然后仅将该列转换为日期格式字符串(yyyy-mm-dd)数据类型列。
我有多个列是datetime。因此,我无法按列名进行更改。但宁愿选择一种检查然后更改它的方法。
请帮助我。
答案 0 :(得分:1)
df = pd.DataFrame(data={'date':(['2018-12-08 00:00:00','2018-12-08 00:10:00','2018-12-08 01:10:00']),'B':[5,4,3],'C':[4,3,2]})
>>df
date B C
0 2018-12-08 00:00:00 5 4
1 2018-12-08 00:10:00 4 3
2 2018-12-08 01:10:00 3 2
>>df.dtypes
date object
B int64
C int64
>>df[df.select_dtypes(['object']).columns]=df[df.select_dtypes(['object']).columns].apply(pd.to_datetime)
发布此帖子后,您可以在类似的系列上致电dt.date
>>df['date'].dt.date
0 2018-12-08
1 2018-12-08
2 2018-12-08
或用于选择多个列(请注意,如果您还有其他对象列与日期不一样,则上述操作可能会失败,在这种情况下,请像下面这样使用)
df[['col1','col2']] = df[['col1','col2']].apply(pd.to_datetime)
从文档中:
揭露select_dtypes
要选择日期时间,请使用np.datetime64,“ datetime”或“ datetime64” 要选择时间增量,请使用np.timedelta64,'timedelta'或'timedelta64
答案 1 :(得分:1)
您可以使用df.dtypes
进行如下检查:
>>> df
PERSON ID MOVING DATE PLACE
0 1 2018-01-01 New York
1 1 2018-01-20 Rio de Janeiro
2 1 2018-02-13 London
3 2 2017-06-12 Seatle
4 2 2016-10-10 New Mexico
5 3 2017-09-19 Sao Paulo
6 3 2015-12-11 Bangladesh
>>> df.dtypes
PERSON ID int64
MOVING DATE datetime64[ns]
PLACE object
dtype: object
或者特别是如果您想查看哪些列是日期时间,请按以下方式使用numpy。因此,numpy为您提供了详细的选择过程。
>>> df.select_dtypes(include=[np.datetime64])
MOVING DATE
0 2018-01-01
1 2018-01-20
2 2018-02-13
3 2017-06-12
4 2016-10-10
5 2017-09-19
6 2015-12-11
您可以执行相同的操作来确定列中是否包含数字
>>> df.select_dtypes(include=[np.number])
PERSON ID
0 1
1 1
2 1
3 2
4 2
5 3
6 3
另一个确定列是否具有对象类型的
>>> df.select_dtypes(include=[np.object])
PLACE
0 New York
1 Rio de Janeiro
2 London
3 Seatle
4 New Mexico
5 Sao Paulo
6 Bangladesh