熊猫-检查是否有任何列是日期时间,并将其更改为日期格式字符串(yyyy-mm-dd)

时间:2019-01-18 02:52:44

标签: python pandas datetime

如何使用pandas检查是否有任何列是datetime数据类型列,然后仅将该列转换为日期格式字符串(yyyy-mm-dd)数据类型列。

我有多个列是datetime。因此,我无法按列名进行更改。但宁愿选择一种检查然后更改它的方法。

请帮助我。

2 个答案:

答案 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