【问题标题】:convert pandas datetime field with NAT entries to date将带有 NAT 条目的 pandas 日期时间字段转换为日期
【发布时间】:2019-08-13 18:30:44
【问题描述】:

我有一个 Pandas 数据框,其字段为 datetime 数据类型。该字段中的大多数值是有效的日期时间值,但有些是 NAT。

我需要删除字段中每个值的日期时间值的时间部分,将字段保持为日期数据类型(而不是 str)。我尝试了以下方法:

df['mydate'] =  df['mydate'].dt.date

如果列中没有 NAT 值,它可以正常工作。但是,如果有 NAT 值,则会抛出此错误

{AttributeError}Can only use .dt accessor with datetimelike values

我尝试了这种替代方法来跳过 NAT:

df['mydate'] = [d.date if not pd.isnull(d) else None for d in df['mydate']]

但这会将列中的值转换为:

<built-in method date of Timestamp object at 0x000002A06F6501C8>

请告知在转换时如何忽略或跳过字段中的 NAT。我没有运气用谷歌搜索答案,我试图避免在整个数据帧上使用 iterrows() 循环。

【问题讨论】:

  • 请添加一些数据来澄清问题

标签: pandas python-datetime


【解决方案1】:

首先将值转换为日期时间,然后运行良好 dt.date 函数:

df  = pd.DataFrame({'mydate':['2015-04-04','2018-09-10', np.nan]})

df['new'] =  pd.to_datetime(df['mydate'], errors='coerce').dt.date
print (df)
       mydate         new
0  2015-04-04  2015-04-04
1  2018-09-10  2018-09-10
2         NaN         NaT

【讨论】:

  • 谢谢。我很感激。这解决了这个问题,这是一个方便的注意事项。
猜你喜欢
  • 2022-12-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
  • 2016-01-27
相关资源
最近更新 更多