首页 > 解决方案 > 使用 Lambda 函数而不是函数重命名 Pandas 中的列

问题描述

我正在尝试使用.rename().

基本上,标题是:

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函数,所以我不确定让它正常工作的语法。

标签: pythonpandas

解决方案


首先,您必须创建返回新值或旧值的函数 - never 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 中使用 new 运算符(“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)

推荐阅读