【发布时间】:2021-03-20 22:17:15
【问题描述】:
我有一个像下面这样的嵌套字典,如果该键位于字符串的末尾,我想使用内部键值对替换字符串,仅当国家代码等于 dict 键(不是内部键)时才用值替换它
'IND': {' PVT. LTD.': ' Pvt. Ltd.',
' pvt. Ltd': ' Pvt. Ltd.',
' PVT LTD': ' Pvt. Ltd.',
' L.L.P.': ' LLP',
' LTD.': ' Ltd.',
' LLP.': ' LLP',
' ltd': ' Ltd.',
' llp': ' LLP'},
'GBR': {' P.L.C.': ' PLC',
' C.I.C.': ' CIC',
' p.l.c': ' PLC',
' c.i.c': ' CIC',
' s.e.': ' SE',
' PLC.': ' PLC'},
'USA': {' LTD. CO.': ' Ltd. Co.',
' L.L.L.P.': ' LLLP',
' ltd. Co': ' Ltd. Co.',
' l.l.l.p': ' LLLP',
' L.L.P.': ' LLP',
' L.L.C.': ' LLC',
' l.l.p': ' LLP',
' l.l.c': ' LLC'}
我的数据框有两个列。法定名称和注册国家代码 -
| Name | Reg Country Code |
|---|---|
| NexPoint LTD. CO. | USA |
| Silverplay P.L.C. | GBR |
| ALLOYS PVT. LTD. | IND |
| GALLIUM ltd. | IND |
| ELLIOTT s.e. | GBR |
我使用了下面的代码 - 当合法名称找到内部键但不使用外部键检查国家/地区条件时,它正在替换字符串。有人可以建议我吗? (我有一个很大的清单)
for i in range(len(df)):
for k1 in country_dict.items():
if df.loc[i, 'Reg Country Code'] == k1:
for k2, v2 in country_dict[k1].items():
df.loc[df['Reg Country Code'] == k1, 'Name'] = [re.sub(k2, v, x) if x.endswith(k2) else x for x in df.loc[df['Reg Country Code'] == k1, 'Name']]
我的输出应该是:
| Name | Reg Country Code |
|---|---|
| NexPoint Ltd. Co. | USA |
| Silverplay PLC | GBR |
| ALLOYS Pvt. Ltd. | IND |
| GALLIUM Ltd. | IND |
| ELLIOTT SE | GBR |
【问题讨论】:
-
什么是
df?country_dict是什么?您能否提供一个完整的最小示例的可执行示例数据?
标签: python regex pandas dictionary nested