【问题标题】:'NaTType' object has no attribute 'days'“NaTType”对象没有属性“天”
【发布时间】:2015-11-23 00:49:15
【问题描述】:

我的数据集中有一列以毫秒为单位表示日期,有时它的值为nan(实际上我的列的类型为str,有时它的值为'nan')。我想以本专栏的天数计算纪元。问题是在做两个日期的差时:

(pd.to_datetime('now') - pd.to_datetime(np.nan)).days

如果一个是nan,它会被转换为NaT,区别是NaTType类型,它没有days属性。

在我的情况下,我希望得到nan。

我尝试过的其他方法:不能使用np.datetime64,因为它不能作为参数nan。我的数据无法转换为int,因为int 没有nan。

【问题讨论】:

  • 为什么不先过滤列:df.loc[df['date'].notnull(), 'days'] = (pd.to_datetime('now') -df['date']).days
  • 我不想过滤,我想拥有所有条目,因为实际上我正在为我的数据集创建一个新列。正如我所说,在这些情况下我想要days=nan。

标签: pandas missing-data


【解决方案1】:

即使你先过滤它也会起作用:

In [201]:
df = pd.DataFrame({'date':[dt.datetime.now(), pd.NaT, dt.datetime(2015,1,1)]})
df

Out[201]:
                        date
0 2015-08-28 12:12:12.851729
1                        NaT
2 2015-01-01 00:00:00.000000

In [203]:
df.loc[df['date'].notnull(), 'days'] = (pd.to_datetime('now') - df['date']).dt.days
df

Out[203]:
                        date  days
0 2015-08-28 12:12:12.851729    -1
1                        NaT   NaN
2 2015-01-01 00:00:00.000000   239

【讨论】:

  • 我同意你的解决方案,但我想如果NaTType 有属性days 会更好(返回nan)
  • 不确定这是否有意义,与真正的 DateTime 对象相比,它对我来说是一个无效值
  • 有了这个功能,您的解决方案会简单得多
【解决方案2】:

对我来说,从 pandas 0.19.2 升级到 pandas 0.20.3 有助于解决此错误。

pip install --upgrade pandas

【讨论】:

  • 你是救生员!
  • 很高兴我能帮上忙 :)
猜你喜欢
  • 2021-12-04
  • 2017-12-12
  • 1970-01-01
  • 1970-01-01
  • 2012-12-01
  • 2021-08-03
  • 2014-10-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多