【发布时间】:2019-12-04 08:36:32
【问题描述】:
我想读入一个 excel 文件,并使用方法链接,将列名转换为小写,并将任何空格替换为 _。以下代码运行良好
def supp_read(number):
filename = f"supplemental-table{number}.xlsx"
df = (pd.read_excel(filename,skiprows=5)
.rename(columns = str.lower))
return df
但是下面的代码没有
def supp_read(number):
filename = f"supplemental-table{number}.xlsx"
df = (pd.read_excel(filename,skiprows=5)
.rename(columns = str.lower)
.rename(columns = str.replace(old=" ",new="_")))
return df
添加str.replace 行后,我收到以下错误:No value for argument 'self' in unbound method call。有人可以阐明我可以做些什么来解决此错误以及为什么上述方法不起作用?
此外,当我使用str.lower() 时,我得到了同样的错误。为什么str.lower 有效,而str.lower() 无效?
【问题讨论】:
-
因为
str.lower()正在调用未绑定的方法,并且它抱怨它缺少它的 self 参数,它确实如此。当您传递str.lower时,您将传递未绑定的方法对象本身,然后将使用一个字符串调用它,并将其作为它的self 参数。你必须传递一个函数,而不是调用它的结果,在这种情况下,你想部分应用函数,又快又脏,传递lambda s: s.replace(" ", "_")而不是str.replace(old=" ",new="_") -
@juanpa.arrivillaga 谢谢你,这正是我想要的!
-
看看我的回答@Gisela,看看它是否回答了你的问题