python - 如何正确地将 lambda 函数应用于数据框列?
问题描述
我有一个看起来像这样的数据框:
data = {'Name':['Tom #111', 'nick #1313', 'krish', 'jack #2 lol'],
'Age':[20, 21, 19, 18]}
df = pd.DataFrame(data)
我想应用一个函数来摆脱任何hastag+数字。我的代码如下所示:
df['Name'].apply(lambda x: re.sub("#[-+]?[0-9]+", " ", str(df['Name'])))
然而,结果是这样的:
0 0 Tom
1 0 Tom
2 0 Tom
3 0 Tom
我的预期输出是:
0 0 Tom
1 0 nick
2 0 krish
3 0 jack lol
我试图在 lambda 函数中使用axis = 1,但它给了我一个错误:
TypeError: <lambda>() got an unexpected keyword argument 'axis'
我怎样才能解决这个问题?
解决方案
您可以使用pandas 字符串方法,
df['Name'] = df['Name'].str.replace('#\d+', '')
Name Age
0 Tom 20
1 nick 21
2 krish 19
3 jack lol 18
如果您想知道如何使用 apply (绝对不是 str 方法的首选),
df['Name'] = df['Name'].apply(lambda x: re.sub('#\d+', '', x))
推荐阅读
- css - 如何解决仅在 Safari Mobile 中出现的 CSS 问题?
- python - 如何在读取文件但删除一个变量然后替换它时删除“\n”字符
- flutter - 无法设置回调函数。错误说:“DropDown”必须有一个方法体,因为“ListLayout”不是抽象的
- android - 如何在apache cordova中完成页面滑动
- django - serializer.save() 不将数据保存到管理数据库
- flutter - (使用不包含 MediaQuery 的上下文调用 MediaQuery.of()。)错误
- sql - 如何在 BigQuery 中编写以下 SQL 查询
- python - 迭代到递归格式
- apache-spark - 在完成的 Spark 作业中“失败”是什么意思?
- sql - 从字符串的开头到结尾替换