更改 pandas 列的日期格式(月-日-年改为日-月-年)

HRR*_*337 6 python datetime pandas

遇到以下问题。

我的熊猫中有一个列,其中包含一些日期和一些空值。

例子:

    1 - 3-20-2019
    2 - 
    3 - 2-25-2019 
Run Code Online (Sandbox Code Playgroud)

ETC

我想将格式从月-日-年转换为日-月-年,当它为空时,我只想将其保留为空。

最快的方法是什么?

谢谢!

小智 7

可以使用字符串初始化日期数据,然后将字符串转换为日期时间。然后打印可以以所需的格式交付对象。

我将使用其他格式(以点作为分隔符),以便步骤之间的转换清晰可见。


首先是示例代码:

import pandas as pd
data = {'day': ['3-20-2019', None, '2-25-2019'] }
df = pd.DataFrame( data )

df['day'] = pd.to_datetime(df['day'])
df['day'] = df['day'].dt.strftime('%d.%m.%Y')
df[ df == 'NaT' ] = '' 
Run Code Online (Sandbox Code Playgroud)

对上述内容的评论。第一个实例df是在 ipython 解释器中:

In [56]: df['day']                                                  
Out[56]: 
0    3-20-2019
1         None
2    2-25-2019
Name: day, dtype: object
Run Code Online (Sandbox Code Playgroud)

转换为日期时间后:

In [58]: df['day']                                               
Out[58]: 
0   2019-03-20
1          NaT
2   2019-02-25
Name: day, dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)

这样我们就有了

In [59]: df['day'].dt.strftime('%d.%m.%Y')
Out[59]: 
0    20.03.2019
1           NaT
2    25.02.2019
Name: day, dtype: object
Run Code Online (Sandbox Code Playgroud)

NaT会带来问题。因此我们用空字符串替换所有出现的地方。

In [73]: df[ df=='NaT' ] = ''

In [74]: df
Out[74]: 
          day
0  20.03.2019
1            
2  25.02.2019
Run Code Online (Sandbox Code Playgroud)