如何修正Pandas实体提取代码:处理无分隔符字符串场景
Pandas字段赋值逻辑修正
原始代码与问题
原始代码意图实现:当Alias等于AAA时,取att字段按.拆分后的第一个元素赋值给ent,否则保留原ent值,但存在逻辑漏洞:
import pandas as pd import numpy as np df = pd.DataFrame({'Alias': ['AAA', 'AAA','TTTTTT', 'GGG'], 'att': ['LG.ident', 'Date','TTTTTT.DDD', 'attribute_test'], 'ent': ['AAA', 'AAA','TTTTTT', 'GGG'], 'id': ['1', '2','3', '4']}) df['ent'] = np.where((df.Alias == 'AAA'),df['att'].str.split('.').str[0].fillna(df['Alias']),df.ent)
问题点:当att字段不含.(如第二行的Date)时,str.split('.').str[0]会返回att的原始值(Date),而非预期的AAA,导致ent赋值错误。
预期输出
| Alias | att | ent | id | |
|---|---|---|---|---|
| 0 | AAA | LG.ident | LG | 1 |
| 1 | AAA | Date | AAA | 2 |
| 2 | TTTTTT | TTTTTT.DDD | TTTTTT | 3 |
| 3 | GGG | attribute_test | GGG | 4 |
修正代码
import pandas as pd import numpy as np df = pd.DataFrame({'Alias': ['AAA', 'AAA','TTTTTT', 'GGG'], 'att': ['LG.ident', 'Date','TTTTTT.DDD', 'attribute_test'], 'ent': ['AAA', 'AAA','TTTTTT', 'GGG'], 'id': ['1', '2','3', '4']}) # 修正逻辑:先判断Alias是否为AAA,再判断att是否含分隔符 df['ent'] = np.where( df.Alias == 'AAA', np.where(df.att.str.contains('\.'), df.att.str.split('.').str[0], df.Alias), df.ent )
逻辑说明
- 外层
np.where判断Alias是否为AAA,满足条件则进入内层判断,否则直接保留原ent值 - 内层
np.where检查att是否包含.:- 包含则取拆分后的第一个元素赋值给
ent - 不包含则直接使用
Alias的原值(即AAA)
- 包含则取拆分后的第一个元素赋值给
内容的提问来源于stack exchange,提问作者kmr
相关产品推荐
相关产品推荐

