使用df.apply(pd.Series.str.upper)报错,pd.Series.min与lambda写法正常
报错原因与解决办法
为什么会报错?
pd.Series.str是pandas的字符串访问器对象,并非普通的实例方法。当你直接把pd.Series.str.lower传给df.apply()时,这个未绑定的方法无法和传入的Series列完成正确绑定,也就没法访问Series内部的_inferred_dtype属性,因此触发报错。
对比两种正常运行的情况:
pd.Series.min是Series的实例方法,apply会自动把每一列Series作为实例去调用它,所以能正常执行。lambda x: x.str.lower()是先拿到每一列Seriesx,再通过x.str访问器完成绑定后调用lower(),走的是正确的调用流程,因此可以正常运行。
怎么解决?
有三种实用方案:
- 继续使用lambda表达式(已验证可行):
df.apply(lambda x: x.str.lower())
- 直接用DataFrame的str访问器(如果所有列都是字符串类型,效率更高):
df = df.str.lower()
- 用applymap做元素级处理:
df.applymap(str.lower)
内容的提问来源于stack exchange,提问作者Shubham Bhardwaj
相关产品推荐
相关产品推荐

