python - 搜索 pandas DataFrame 任意行中包含的文本
问题描述
我有以下DataFrame
pred[['right_context', 'PERC']]
Out[247]:
right_context PERC
0 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0.000197
1 San Pedro xxxxxxxxxxxx 0.572630
2 zxxxxxxxxxxxxxxxxxxxxxxxxxxx 0.572630
3 de San Pedro Este parcela 0.572630
4 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0.035577
我还有另一个用真实地址DataFrame
调用的熊猫:_direcciones
388427 SAN PEDRO 1
388428 bbbbbbbbbbbbbbbbbbbbbb 1
388429 yyyyyyyyyyyyyyyyyyy 1
[388430 rows x 2 columns]
我需要以某种方式搜索第一个中_direcciones
是否包含DataFrame
某个地址,我所做的是:
[True for y in pred.right_context
for x in _direcciones.entity_content
if re.match(r'^%s\b' %x, y, flags=re.I)]
但它很慢,更重要的是,如果找到地址,我想在第一DataFrame
列True|False
附加值,但目前我不能,因为上面的代码可以返回任意数量的行,不完全是5
,比如我需要第一个DataFrame
.
像这样的东西:
pred[['right_context', 'PERC']]
Out[247]:
right_context PERC found?
0 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0.000197 F
1 San Pedro xxxxxxxxxxxx 0.572630 T
2 zxxxxxxxxxxxxxxxxxxxxxxxxxxx 0.572630 F
3 de San Pedro Este parcela 0.572630 T
4 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0.035577 F
更新
感谢您的回答,但我面临同样的问题,_direcciones
是如此之大,以至于pred.right_context
存在一个单词的机会_direcciones
非常高。例如:
预测
0 URBANA. OBRA NUEVA TERMINADA. Urbana
1 San Pedro número xxxxx
在这里,我正在寻找San Pedro
,但两者San Pedro
和URBANA
都在_direcciones
,所以两行都是True
。我不知道如何解决这个问题。
解决方案
Series.str.contains
&str.upper
您不能使用分隔符Series.str.contains
将列_direcciones
作为一个字符串使用和连接。|
同样重要的是要注意,我们必须将数据帧的字符串pred
转换为大写str.upper
pred['found?'] = pred['right_context'].str.upper()\
.str.contains('|'.join(_direcciones['Address']))
print(pred)
right_context PERC found?
0 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0.000197 False
1 San Pedro xxxxxxxxxxxx 0.572630 True
2 zxxxxxxxxxxxxxxxxxxxxxxxxxxx 0.572630 False
3 de San Pedro Este parcela 0.572630 True
4 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0.035577 False
只得到T
&F
pred['found?'] = pred['right_context'].str.upper()\
.str.contains('|'.join(_direcciones['Address']))\
.astype(str).str[:1]
print(pred)
right_context PERC found?
0 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0.000197 F
1 San Pedro xxxxxxxxxxxx 0.572630 T
2 zxxxxxxxxxxxxxxxxxxxxxxxxxxx 0.572630 F
3 de San Pedro Este parcela 0.572630 T
4 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0.035577 F
的输出'|'.join
'|'.join(_direcciones['Address'])
'SAN PEDRO|bbbbbbbbbbbbbbbbbbbbbb|yyyyyyyyyyyyyyyyyyy'
推荐阅读
- reactjs - 无法使用一些模拟函数测试反应组件
- java - Junit 5中是否可以使用Java功能接口实现(例如Supplier)作为MethodSource?
- logstash - Logstash 摄取每日 JSON 文件
- oracle - 使用发票日期和销售价值查找年度增长
- android - 如何为弹出菜单设置动画?
- python - “sentencize” Spacy 文档然后应用 POS 标签的有效方法
- typescript - 'webstorm.typescript.webpack_alias'。当我在 tsx 中使用别名时,我无法获得智能提示
- ios - Cocoa pod 命令在 Catalina os,xcode 11 中给出错误
- geometry - 如何在框架中创建自定义 3d 形状?
- python - html枚举后为属性赋值