![](/img/trans.png)
[英]Pandas: Replace column values to empty if not present in pre-defined list
[英]Replace column based strings with multiple with pre-defined values - Python
我對在python中實現以下邏輯的方法感到有些困惑。 在選擇一種方法時,我需要專家的建議。
我必須用某些列中的預定義值替換字符串。 例如
| 是定界符
輸入:
ABCD|NewYork|800|TU
XYA|England|589|IA
輸出:
QWER|NewYork|800|PL
NHQ|England|589|DQ
預定義詞典:
Actual Value : ABCDEFGHIJKLMNOPQRSTUVWXYZ
Replace Value : QWERTYASDFGHNBVCXZOPLKMNHY
因此,如果值為ABCD,我應該得到QWER。 如果是TU,則應將其替換為PL。 這些值可以是隨機的。
我的方法如下
我覺得這可能是不好的編碼方式。 與上述方法有什么不同的方法嗎? 請提出一種方法。
不同文件的列可能不同。 應該是動態的
您可以使用str.translate
和str.maketrans
使您的生活更加輕松:
In [1]: fnd = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
...: rpl = 'QWERTYASDFGHNBVCXZOPLKMNHY'
...: trns = str.maketrans(fnd, rpl)
In [2]: 'ABCD'.translate(trns)
Out[2]: 'QWER'
In [4]: 'UV'.translate(trns)
Out[4]: 'LK'
這是對str.join
使用列表str.join
一種方法。
訣竅是將字典轉換為Python dict
。
x = ['ABCD|NewYork|800|TU',
'XYA|England|589|IA']
d = dict(zip('ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'QWERTYASDFGHNBVCXZOPLKMNHY'))
res = ['|'.join([''.join(list(map(d.get, i[0])))]+i[1:]) \
for i in map(lambda y: y.split('|'), x)]
結果:
['QWER|NewYork|800|TU',
'NHQ|England|589|IA']
應該這樣做:
from string import maketrans
actual = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
replace = 'QWERTYASDFGHNBVCXZOPLKMNHY'
with open('infile.txt') as inf, open('outfile.txt', 'w') as outf:
toBeWritten = []
for line in inf:
items = line.strip().split('|')
items[0] = items[0].translate(maketrans( actual, replace))
items[3] = items[3].translate(maketrans( actual, replace))
print items
toBeWritten.append('|'.join(items))
outf.writelines(toBeWritten)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.