处理pandas中的应用功能

时间:2017-11-29 06:53:26

标签: python-3.x pandas

考虑数据框:

x = pd.DataFrame({'a' :[1,2,3], 'b':['za','zb','zc']})

当我尝试

x['b'].apply(str.upper)

工作正常。

但是当我尝试

x['b'].apply(str.replace('z',''))

这是一个错误。

任何人都可以帮助我在pandas中应用和映射函数中可以使用的函数

提前致谢。

2 个答案:

答案 0 :(得分:1)

在pandas中最好使用str访问者functions

print(x['b'].str.upper())
0    ZA
1    ZB
2    ZC
Name: b, dtype: object

print(x['b'].str.replace('z',''))
0    a
1    b
2    c
Name: b, dtype: object

但如果需要apply添加lambda,但如果某些NaN的值失败则会失败:

print(x['b'].apply(lambda x: x.replace('z','')))
0    a
1    b
2    c
Name: b, dtype: object

答案 1 :(得分:0)

澄清实际导致错误的原因:您可以使用apply中的任何函数,但str.replace('z', '')不是有效的语句。这将自行抛出错误。

replace是字符串对象的bound method。它适用于字符串对象,而不是字符串类型:

'xyz'.replace('z', '')    # Returns 'xy'
str.replace('z', '')      # Throws TypeError (not enough arguments)

上述任何一个语句都不返回函数,因此结果不能与apply一起使用。正如在@jezrael的回答中,要将replaceapply一起使用,您需要一个带有一个参数的函数,例如lambda。

str.upper工作的原因,尽管也是一个绑定方法,但是它不带任何其他参数,因此可以用一个参数调用。因此str.upper('xyz')等同于正确使用'xyz'.upper()。如果您尝试replace

,则会看到与使用x['b'].apply(str.upper())相同的错误