我有一個名為sample.csv的 csv 檔案,如下所示:
No,duong
1, Du<U 1EDD>ng DT 605
2, Du<U 1EDD>ng Nam K<U 1EF3> Kh<U 1EDF>i Nghia
3, Du<U 1EDD>ng Duy Tan
我有另一個名為viscii.csv的 csv 檔案,其中包含字符代碼:
key, value
<U 1EDD>,?
<U 1EF3>,?
<U 1EDF>,?
我做了以下幾點:
import pandas as pd
duong = pd.read_csv('sample.csv')
code = pd.read_csv('viscii.csv')
code_dict = dict((a, b) for a, b in zip(code['key'],code[' value']))
duong.replace(code_dict, regex = True)
結果是:
No duong
0 1 Du<U 1EDD>ng DT 605
1 2 Du<U 1EDD>ng Nam K<U 1EF3> Kh<U 1EDF>i Nghia
2 3 Du<U 1EDD>ng Duy Tan
這不是我想要的。我想要的是:
No duong
0 1 Du?ng DT 605
1 2 Du?ng Nam K? Kh?i Nghia
2 3 Du?ng Duy Tan
它的意思是
<U 1EDD> is replaced by "?"
<U 1EF3> is replaced by "?"
<U 1EDF> is replaced by "?"
你能告訴我這個解碼出了什么問題嗎?
uj5u.com熱心網友回復:
您的答案將適用于您的具體情況,但這里的關鍵是您想要轉義您的正則運算式字串,因為您不希望它被 視為特殊字符。
您的答案有效,因為將特殊字符括起來[...]會洗掉特殊含義,并且正則運算式會解釋[ ]為括號內的組中的任何字符。更通用的解決方案是在創建字典時使用該re.escape函式來轉義正則運算式:
import pandas as pd
import re
duong = pd.read_csv('sample.csv')
code = pd.read_csv('viscii.csv')
code_dict = dict((re.escape(a), b) for a, b in zip(code['key'],code[' value']))
這將創建一個如下所示的字典:
{'<U\\ 1EDD>': '?', '<U\\ 1EF3>': '?', '<U\\ 1EDF>': '?'}
請注意:之前鍵中的反斜杠re.escape知道裸 字符是特殊字符,因此它為我們轉義了它。現在,當你這樣做時
duong.replace(code_dict, regex=True)
你得到:
No duong
0 1 Du?ng DT 605
1 2 Du?ng Nam K? Kh?i Nghia
2 3 Du?ng Duy Tan
uj5u.com熱心網友回復:
我想我發現了我的錯誤。
RegEx 與 ' ' 混淆,所以我將 ' ' 替換為 '[ ]'。
代碼是
code = pd.read_csv('viscii.csv')
code['key'] = code["key"].str.replace(" ", "[ ]", regex = True)
code_dict = dict((a, b) for a, b in zip(code['key'],code[' value']))
duong.replace(code_dict, regex = True)
然后事情進展順利
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/495888.html
上一篇:將大資料保存在csv檔案中
