替换是在pandas python中产生奇怪的答案

时间:2017-11-02 14:56:48

标签: python pandas dictionary replace

我正在使用字典键值对来替换一些字符串。

dict= {'MAA':'MADRAS', 'MAD':'MADRID'}

现在使用.replace(),它将MAA替换为MADRAS,但MADRAS的MAD再次被MARDRID取代。这给了我错误的输出,我有8000多个键值对,所以我的输出变得非常奇怪。有没有办法纠正它。

非常感谢任何建议。

我使用以下代码:

#creating dict from dataframe with 8k+ key value pairs.. 
iata_dict = dict(zip(df7.CityCode, df7.CityName))
for x,y in iata_dict.items():
    df6["Itinerary"] = df6["Itinerary"].str.replace(x, y) 

这是我的数据框行程中的一列,其中包含数据 -

BRISBANE-AKL-SCL-LIM/CIX-LIM/LAX/BNE
PER-HKG/HND/PVG-HKG/PER
PER/JNB/PER
PER-DXB/ALA-TSE/LHR-DXB/PER
BNE/LST/MEL-CHC/IVC/CHC/BNE
ANF/SCL-ATL/SLC-LAX-SYD/BNE
MAA-BOM/HYD/MAA
MEL/SIN/MEL
PER-SYD/SFO/MSO/SLC-LAX-BNE/PER

1 个答案:

答案 0 :(得分:0)

需要进行优化,但这有效:

import re
di= {'MAA':'MADRAS', 'MAD':'MADRID'}
st = ['BRISBANE-AKL-SCL-LIM/CIX-LIM/LAX/BNE',
'PER-HKG/HND/PVG-HKG/PER',
'PER/JNB/PER',
'PER-DXB/ALA-TSE/LHR-DXB/PER',
'BNE/LST/MEL-CHC/IVC/CHC/BNE',
'ANF/SCL-ATL/SLC-LAX-SYD/BNE',
'MAA-BOM/HYD/MAA',
'MEL/SIN/MEL',
'PER-SYD/SFO/MSO/SLC-LAX-BNE/PER']
for s in st:
    for d in di.keys():
        r = re.compile('(?![A-Z])*' + d + '(?![A-Z])*')
        s = re.sub(r, di[d],s)
    print(s)

这个正则表达式检查我们替换的单词是否被其他单词或字母包围。其他周围的符号很好。 如果要优化此代码,可以在字符串循环之前编译表达式。

这是输出:

BRISBANE-AKL-SCL-LIM/CIX-LIM/LAX/BNE
PER-HKG/HND/PVG-HKG/PER
PER/JNB/PER
PER-DXB/ALA-TSE/LHR-DXB/PER
BNE/LST/MEL-CHC/IVC/CHC/BNE
ANF/SCL-ATL/SLC-LAX-SYD/BNE
MADRAS-BOM/HYD/MADRAS
MEL/SIN/MEL
PER-SYD/SFO/MSO/SLC-LAX-BNE/PER