Сначала вам нужно будет создать функцию, которая возвращает новое или старое значение - никогда 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)