首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >时间戳对象没有属性dt

时间戳对象没有属性dt
EN

Stack Overflow用户
提问于 2020-07-09 05:05:39
回答 3查看 26.1K关注 0票数 7

我试图通过一个基于date列中的值的函数来转换dataframe中的新列,但得到了一个错误,指出"Timestamp object has no attribute dt“。但是,如果我在函数外部运行这个函数,dt属性就可以正常工作。

任何指导都将不胜感激。

此代码运行时没有任何问题:

代码语言:javascript
运行
复制
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

这段代码给出了错误消息:

代码语言:javascript
运行
复制
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)

最后,我对如何改进这段代码的任何建议都持开放态度,因为我还在学习。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-08-07 11:05:37

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

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

票数 13
EN

Stack Overflow用户

发布于 2020-07-09 20:43:21

在查看了时间戳文档之后,我发现删除.dt只需要执行.year和.month工作。然而,我仍然不明白为什么它在第一个代码中可以工作,而在第二个代码中不能工作。

票数 5
EN

Stack Overflow用户

发布于 2021-01-09 00:24:51

下面是如何使用年和月创建一个年月存储桶

代码语言:javascript
运行
复制
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))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62803633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档