【问题标题】:Getting error AttributeError: 'str' object has no attribute 'strftime'出现错误 AttributeError:“str”对象没有属性“strftime”
【发布时间】:2021-10-12 09:11:39
【问题描述】:

我遇到了一个错误

'str' 对象没有属性'strftime'

来自我的这段代码:

from datetime import datetime, date
analysis_dataframe.loc[:,'order_period'] = analysis_dataframe.date.apply(lambda x: x.strftime('%Y-%m'))
analysis_dataframe.head(10)

我有一列“日期”,日期格式如下:

我该如何解决这个错误?

谢谢

【问题讨论】:

  • -03:00etc 是什么意思?在您的输入中是什么意思(日期/时间字符串)?这是与 UTC 的偏移量吗?
  • ...如果是这样,我建议简单地转换为 UTC 日期时间;例如pd.to_datetime(df['order_period'], utc=True)。之后,您可以轻松地重新格式化为字符串; .dt.strftime("%Y-%m").

标签: python dataframe date datetime lambda


【解决方案1】:

strftime 是datetime 类的成员函数。 你在 x 上调用了函数:x.strftime('%Y-%m')。错误消息表明 x 是 str 类型的对象,即它是一个字符串。

看起来您的analysis_dataframe.date 是一个数组/一系列格式化的日期时间字符串,而不是实际的日期时间。 因此,要使用strftime函数,需要先将日期字符串解析成datetime对象,然后调用strftime函数:

... = analysis_dataframe.date.apply(lambda x: datetime.fromisoformat(x).strftime('%Y-%m'))

【讨论】:

    【解决方案2】:

    首先,由于strftime 方法需要pandas datatime 对象首先转换它:

    analysis_dataframe.date  = pd.to_datetime(analysis_dataframe.date)
    

    现在你的命令应该可以工作了

    analysis_dataframe.order_period = analysis_dataframe.date.apply(lambda x: x.strftime('%Y-%m'))
    

    【讨论】:

      猜你喜欢
      • 2013-11-22
      • 1970-01-01
      • 2018-03-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多