pandas - 从字符串列表中检索匹配项并添加为数据框中的列
问题描述
我有一个数据框,其中包含列text
和user
.
用户 | 文本 |
---|---|
汤姆 | 我爱香蕉 |
迪克 | 我爱苹果 |
哈利 | 我喜欢苹果和香蕉 |
我想查找text
其中包含fruits
. 对于每个匹配的字符串,都会将新行添加到新列fruits
和fruits_with_colors
. 预期输出如下:
用户 | 文本 | 水果 |
---|---|---|
汤姆 | 我爱香蕉 | 香蕉 |
迪克 | 我爱苹果 | 苹果 |
哈利 | 我喜欢苹果和香蕉 | 苹果 |
哈利 | 我喜欢苹果和香蕉 | 香蕉 |
我在思考如何做到这一点时遇到了一些麻烦。我正在使用熊猫执行以下操作:
fruits = ['apples', 'bananas']
df_with_matches = df[df['text'].str.contains('|'.join(fruits))]
但我返回错误sequence item 0: expected str instance, list found
解决方案
您可以使用str.findall
将水果提取到列表中,然后使用explode
它:
df.assign(fruits = df.text.str.findall('|'.join(fruits))).explode('fruits')
user text fruits
0 Tom I love bananas bananas
1 Dick I love apples apples
2 Harry I love apples and bananas apples
2 Harry I love apples and bananas bananas
推荐阅读
- c++ - 无法使用 CMake 链接外部库,找不到库或未定义的用户引用
- excel - 多列 IF 语句
- symfony - 无法在 Docker 容器上启动 Symfony 5 服务器(symfony serve -d)
- git - 使用 git commit 后,它的说不被识别为内部和外部命令
- reactjs - 高阶组件不会分散 InputList
- batch-file - 检查是否设置了任何以某些前缀命名的变量?
- hide - 如何在根设备 android 10 中隐藏特定应用的导航栏和通知面板?
- apache-spark - Spark:从没有 _SUCCESS 文件的文件夹中读取时产生错误
- testing - 在nestjs测试模块中找不到nestjsx-automapper配置文件
- flutter - 负责 CircularProgressIndicator 的主题