【问题标题】:Method Chaining in Pandas: str.replace not workingPandas 中的方法链:str.replace 不起作用
【发布时间】: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,看看它是否回答了你的问题

标签: python pandas


【解决方案1】:

这是我经常使用的另一种语法:

def supp_read(number):
    filename = f"supplemental-table{number}.xlsx"
    df = pd.read_excel(filename,skiprows=5)
    df.columns = df.columns.str.lower().replace(" ", "_")
    return df

【讨论】:

  • 谢谢,这也有帮助!
猜你喜欢
  • 2016-08-03
  • 2021-04-19
  • 2018-01-25
  • 2014-04-17
  • 2018-09-11
  • 2021-12-05
  • 1970-01-01
  • 2019-08-24
  • 1970-01-01
相关资源
最近更新 更多