python - 用另一个数据帧中的干净 str 替换混乱的 str
问题描述
我有 2 组数据框,如果 df1['Fruits'] 包含 df2['Fruits'] 字符串,我想清理它
df1
Name Fruits
--------------
Dina Pineapple, [Y*]
Maria PTC*, Apple
Johny Durian, 1-6
Johny 5,6 Rambutan
Maria Apple (Red), [Y] *
Dina [Y] *, Peach88
Dina Kiwi/Qiwi, PS*
df2
Fruits tag
-------------
Apple 20
Pineapple 30
Rambutan 40
Durian 50
Apple (Red) 25
Peach88 55
Kiwi/Qiwi 25
我试过了
df1.loc[df1['Fruits'].contains(df2['Fruits']),'Fruits'] = df2['Fruits']
但它显示
“系列”对象没有“包含”属性
所以我期望得到的是
df1
Name Fruits
--------------
Dina Pineapple
Maria Apple
Johny Durian
Johny Rambutan
Maria Apple (Red)
Dina Peach88
Dina Kiwi/Qiwi
解决方案
使用pandas.Series.str.extract
:
reg = '(%s)' % '|'.join(df2['Fruits'])
# Make regex expression using df2['Fruits']
df1['Fruits'] = df1['Fruits'].str.extract(reg)
输出:
Name Fruits
0 Dina Pineapple
1 Maria Apple
2 Johny Durian
3 Johny Rambutan
解释'(%s)' % '|'.join(df2['Fruits'])
:
'|'.join(df2['Fruits'])
: 为正则表达式中的操作创建|
分隔的单词。or
退货Pineapple|Apple|Durian|Rambutan
(%s) % ...
:这称为字符串格式化,相当于:str.format
:'({})'.format('|'.join(df2['Fruits']))
,- 或更隐含(但不那么 Pythonic)
'(' + '|'.join(df2['Fruits']) + ')'
- 所有这些都返回
(Apple|Pineapple|Rambutan|Durian)
,一个捕获组,必须pd.Series.str.extract
知道要提取什么。
推荐阅读
- php - 在 Laravel 5.8 的 PHPWord 中生成 Word 文件
- azure - 为 Azure VPN 生成证书时无法通过 OpenVPN 连接
- scala - 为什么 println("\n") 在scala中不起作用
- python - 如何在 PyQt 画布上显示 x 和 y 标签?
- c++ - 将通用 Windows 应用程序转换为 VisualStudio 2019 上的常规应用程序
- spring-boot - 如何通过API网关配置对eureka客户端的API请求
- python - 测试 Pandas 数据框单元格是否包含空值
- ios - 为什么iOS 13上UITabBarItem中的gif图像显示蓝色?
- java - Spring boot Oauth2 JWT 范围不足错误
- java - 我可以同时创建 SQLite 表和插入值吗?