【问题标题】:Rename Columns in Pandas Using Lambda Function Rather Than a Function使用 Lambda 函数而不是函数重命名 Pandas 中的列
【发布时间】:2020-08-03 22:04:14
【问题描述】:

我正在尝试使用 .rename() 在我的数据框中重命名 pandas 中的列标题。

基本上,标题是:

column 1: "Country name[9]"
column 2: "Official state name[5]"

#etc.

我需要删除[number]

我可以用一个函数来做到这一点:

def column(string):
    for x, v in enumerate(string):
        if v == '[':
           return string[:x]

但我想知道如何将其转换为 lambda 函数以便我可以使用

df.rename(columns = lambda x: do same as function)

我以前从未使用过lambda 函数,所以我不确定让它正常工作的语法。

【问题讨论】:

  • df.columns.str.replace(r'\[\d+\]$', '')?....有关regex pattern的详细信息
  • 我最终使用了这个函数:df.rename(columns = lambda p: column(p), inplace = True) 效果很好。由于某种原因,剥离功能似乎不起作用 - 可能是因为它有多个标题。
  • 您可以在lambda x: column(x) 中使用您的函数,或者您将首先创建在else: 中返回一些值的函数
  • 顺便说一句:你可以写df.rename(columns=column, inplace=True) 而不是df.rename(columns=lambda p: column(p), inplace=True),因为columns= 期望函数得到一个参数,而你的函数得到一个参数。

标签: python pandas


【解决方案1】:

首先,您必须创建返回新值或旧值的函数 - 绝不是 None

def column(name):
    if '[' in name:
        return name[:name.index('[')]  # new - with change
    else:
        return name  # old - without change

然后你就可以把它当做

df.rename(columns=lambda name:columns(name))

甚至更简单

df.rename(columns=columns)

或者您可以将您的函数转换为真实的lambda

df.rename(columns=(lambda name: name[:name.index('[')] if '[' in name else name) )

但有时保留def column(name) 并使用columns=column 更具可读性。并不是所有的结构都可以在lambda 中使用 - 即。您不能为变量赋值(我不知道您是否可以在 Python 3.8 中使用新运算符 := ("walrus"))。


最少的工作代码

import pandas as pd

data = {
    'Country name[9]': [1,2,3],
    'Official state name[5]': [4,5,6],
    'Other': [7,8,9],
}    
    
df = pd.DataFrame(data)

def column(name):
    if '[' in name:
        return name[:name.index('[')]
    else:
        return name

print(df.columns)

df = df.rename(columns=column)        

# or 

df = df.rename(columns=(lambda name: name[:name.index('[')] if '[' in name else name) )

print(df.columns)

【讨论】:

    猜你喜欢
    • 2018-12-18
    • 1970-01-01
    • 2013-10-31
    • 2019-09-12
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    相关资源
    最近更新 更多