在存在空值(熊猫)的日期上使用lambda和strftime

For*_*ded 5 python lambda strftime pandas

我正在尝试使用lambda和strftime更改数据框中日期时间列的格式,如下所示

df['Date Column'] = df['Date Column'].map(lambda x: x.strftime('%m/%d/%Y'))
Run Code Online (Sandbox Code Playgroud)

但是,由于我在某些字段中具有空值,这给我一个错误。我不能删除这些空行,因为其他列中的数据仍然需要它们。是否有办法解决此错误而不删除null。

也许像

df['Date Column'].map(lambda x: x.strftime('%m/%d/%Y') if x != null else "")
Run Code Online (Sandbox Code Playgroud)

我使用的方法是删除null,格式化列,然后将其合并回原始数据集,但这似乎是一种效率很低的方法。

Sto*_*ica 7

你不应该检查 nan/nat (un)equality,但.notnull()应该工作,它对我有用:

s = pd.date_range('2000-01-01', periods=5).to_series().reset_index(drop=True)
s[2] = None
s

0   2000-01-01
1   2000-01-02
2          NaT
3   2000-01-04
4   2000-01-05
dtype: datetime64[ns]

s.map(lambda x: x.strftime('%m/%d/%Y') if pd.notnull(x) else '')

0    01/01/2000
1    01/02/2000
2              
3    01/04/2000
4    01/05/2000
dtype: object
Run Code Online (Sandbox Code Playgroud)

这返回与@Alexander 和@Batman 的答案相同,但更明确。对于大系列,它也可能稍微慢一些。

或者,您可以使用.dtaccesor。空值将被格式化为NaT.

s.dt.strftime('%m/%d/%Y')

0    01/01/2000
1    01/02/2000
2           NaT
3    01/04/2000
4    01/05/2000
dtype: object
Run Code Online (Sandbox Code Playgroud)