考虑数据框:
x = pd.DataFrame({'a' :[1,2,3], 'b':['za','zb','zc']})
当我尝试
时x['b'].apply(str.upper)
工作正常。
但是当我尝试
时x['b'].apply(str.replace('z',''))
这是一个错误。
任何人都可以帮助我在pandas中应用和映射函数中可以使用的函数
提前致谢。
答案 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的回答中,要将replace
与apply
一起使用,您需要一个带有一个参数的函数,例如lambda。
str.upper
工作的原因,尽管也是一个绑定方法,但是它不带任何其他参数,因此可以用一个参数调用。因此str.upper('xyz')
等同于正确使用'xyz'.upper()
。如果您尝试replace
x['b'].apply(str.upper())
相同的错误