微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python:在pandas lambda表达式中使用函数

我有以下代码,试图找到数据框中“日期”列的小时:

print(df['Dates'].head(3))
df['hour'] = df.apply(lambda x: find_hour(x['Dates']), axis=1)

def find_hour(self, input):
    return input[11:13].astype(float)

print(df [‘Dates’].head(3))如下所示:

0    2015-05-13 23:53:00
1    2015-05-13 23:53:00
2    2015-05-13 23:33:00

但是,我收到以下错误

    df['hour'] = df.apply(lambda x: find_hour(x['Dates']), axis=1)
NameError: ("global name 'find_hour' is not defined", u'occurred at index 0')

有谁知道我错过了什么?谢谢!

请注意,如果我将函数直接放在lambda行中,如下所示,一切正常:

df['hour'] = df.apply(lambda x: x['Dates'][11:13], axis=1).astype(float)

解决方法:

您在尝试使用find_hour之前尝试使用它.你只需要切换一下:

def find_hour(self, input):
    return input[11:13].astype(float)

print(df['Dates'].head(3))
df['hour'] = df.apply(lambda x: find_hour(x['Dates']), axis=1)

编辑:padraic指出了一个非常重要的观点:find_hour()被定义为接受两个参数,self和input,但是你只给它一个.您应该将find_hour()定义为def find_hour(input):除了将参数定义为输入影响内置函数.您可以考虑将其重命名为更具描述性的内容.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐