【问题标题】:Python lambda function error when used with brackets与括号一起使用时 Python lambda 函数错误
【发布时间】:2020-12-12 00:24:31
【问题描述】:

我有一个包含时间戳信息的“日期时间”列的熊猫数据框,我想从“日期时间”列中提取小时信息并将其添加到数据框的小时列中。

我很困惑,因为如果我编写没有大括号的 lambda 函数,我的代码就可以工作

df['Datetime'].apply(lambda x: x.hour)

但是,当我尝试使用此代码时

df['Datetime'].apply(lambda x: x.hour**()**)

我收到错误“TypeError: 'int' object is not callable”。

另一方面,当我使用带有 lambda 表达式的 split 函数时,它与大括号一起工作完全正常 -

df['Reasons'] = df['title'].apply(lambda x: x.split(':')[0])

【问题讨论】:

  • hour 是 int,不是函数,split 是函数
  • 你应该使用df['Datetime'].dt.hour。你不需要为所有事情做lambda x:。通常最好只使用没有它的 pandas 方法。分裂也一样。你应该这样做:df['title'].str.split(':').str[0]) 这是用 pandas 编写好的代码的基础,所以如果你能牢记这些技巧,你会受益匪浅。

标签: python-3.x pandas dataframe lambda


【解决方案1】:

正如@Dani Mesejo 提到的,小时是日期时间对象的一个​​属性。因此,它在没有括号的情况下工作正常。添加括号后,它会假定小时是一个函数,因此您会收到该错误。

您可以在其documentation 中阅读有关 datetime 对象的更多信息

【讨论】:

    猜你喜欢
    • 2019-10-28
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多