python - 使用 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
函数,所以我不确定让它正常工作的语法。
解决方案
首先,您必须创建返回新值或旧值的函数 - 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)
推荐阅读
- python - 在 apache 梁管道 Python 中跳过步骤
- c# - 更改 TextBox 文本时自动更改 DataGrid 中的数据(Xml 源)
- c# - 从 azure devops 服务器下载文件将错误数据写入文件
- python - 为什么有时在 PowerShell(以及命令提示符)中使用单引号将命令括起来时不起作用?
- python - 从列表中查找具有特定单词的列
- javascript - 用其他文本替换部分字符串?
- c++ - 将excel文件读入struct c++
- javascript - Tensorflow.js 神经网络中的反向传播
- html - 我怎样才能使这个布局响应?
- firebase - Firebase 身份验证用户信息流