【问题标题】:Timestamp object has no attribute dt时间戳对象没有属性 dt
【发布时间】:2020-10-29 09:15:36
【问题描述】:

我正在尝试通过基于日期列中的值的函数转换数据框中的新列,但收到错误消息,指出“时间戳对象没有属性 dt”。但是,如果我在函数之外运行它,则 dt 属性可以正常工作。

任何指导将不胜感激。

这段代码运行没有问题:

sample = {'Date': ['2015-07-02 11:47:00', '2015-08-02 11:30:00']}
dftest = pd.DataFrame.from_dict(sample)
dftest['Date'] = pd.to_datetime(dftest['Date'])
display(dftest.info())
dftest['year'] = dftest['Date'].dt.year
dftest['month'] = dftest['Date'].dt.month

这段代码给了我错误信息:

sample = {'Date': ['2015-07-02 11:47:00', '2015-08-02 11:30:00']}
dftest = pd.DataFrame.from_dict(sample)
dftest['Date'] = pd.to_datetime(dftest['Date'])
def CALLYMD(dftest):
    if dftest['Date'].dt.month>9:
        return str(dftest['Date'].dt.year) + '1231'
    elif dftest['Date'].dt.month>6: 
        return str(dftest['Date'].dt.year) + '0930'
    elif dftest['Date'].dt.month>3: 
        return str(dftest['Date'].dt.year) + '0630'
    else:
        return str(dftest['Date'].dt.year) + '0331'
    

dftest['CALLYMD'] = dftest.apply(CALLYMD, axis=1)

最后,我愿意接受任何有关如何使这段代码更好的建议,因为我仍在学习中。

【问题讨论】:

  • 在您的第二个代码 sn-p 中,您需要先转换为日期时间(您在第一个代码中所做的)。
  • 对此感到抱歉 - 在我的原始代码中,它已经是一个日期时间对象。我只是在我的第二个代码中忘记了这一点,但已经编辑了帖子以包含它。添加它仍然不能修复返回的 AttributeError 。还有其他想法吗?
  • 您可以在函数内部删除 date.dt,但在外部使用 df['Date'].date

标签: python dataframe datetime timestamp


【解决方案1】:

我猜你应该在第二种情况下删除 .dt 。当您应用它时,它适用于每个元素,当它是一组数据时需要 .dt ,如果它只是一个元素,则不需要 .dt 否则它会引发 {AttributeError: 'Timestamp' 对象没有属性 'dt'}

参考:https://stackoverflow.com/a/48967889/13720936

【讨论】:

    【解决方案2】:

    查看时间戳文档后,我发现删除 .dt 并仅执行 .year 和 .month 工作。但是,我仍然对为什么它在第一个代码中起作用而在第二个代码中不起作用感到困惑。

    【讨论】:

    • year=pd.to_datetime(item['CompleteOrExpireDate']).year 我很惊讶,但删除 dt 有效。如果数据框列是日期时间,那么使用 dt.year 是正确的语法
    【解决方案3】:

    这里是如何使用年和月创建年月桶

    for key, item in df.iterrows(): 
         year=pd.to_datetime(item['Date']).year
         month=str(pd.to_datetime(item['Date']).month)
         df.loc[key,'YearMonth']="{:.0f}{}".format(year,month.zfill(2))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-18
      • 2020-07-07
      • 1970-01-01
      • 2014-10-13
      • 2019-07-04
      • 2019-05-17
      • 2020-05-19
      相关资源
      最近更新 更多