Переименовать столбцы в Pandas, используя лямбда-функцию, а не функцию - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь переименовать заголовки столбцов в моем фрейме данных в 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, поэтому я не уверен в синтаксисе, чтобы заставить его работать правильно.

1 Ответ

0 голосов
/ 03 августа 2020

Сначала вам нужно будет создать функцию, которая возвращает новое или старое значение - никогда 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 - ie. вы не можете присвоить значение переменной (я не знаю, можно ли использовать новый оператор := ("морж") в Python 3.8).

Минимальный рабочий код

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...