【发布时间】:2017-07-15 18:24:07
【问题描述】:
我会尽量简化。我有一个按州列出企业列表的 DataFrame。有些州是缩写的,有些不是。我想用缩写替换完整的州名(例如:新泽西州到新泽西州)。
我发现here 找到了一个很酷的模块“US”,它在字典中列出了所有州及其缩写。我想做的是用缩写替换全名。
代码:
import pandas as pd
import numpy as np
import us
dfp = pd.DataFrame({'A' : [np.NaN,np.NaN,3,4,5,5,3,1,5,np.NaN],
'B' : [1,0,3,5,0,0,np.NaN,9,0,0],
'C' : ['Pharmacy of Oklahoma','NY Pharma','NJ Pharmacy','Idaho Rx','CA Herbals','Florida Pharma','AK RX','Ohio Drugs','PA Rx','USA Pharma'],
'D' : [123456,123456,1234567,12345678,12345,12345,12345678,123456789,1234567,np.NaN],
'E' : ['Assign','Unassign','Assign','Ugly','Appreciate','Undo','Assign','Unicycle','Assign','Unicorn',]})
print(dfp)
statez = us.states.mapping('abbr', 'name')
lst_of_abbrv = statez.keys()
lst_of_states = statez.values()
phrase = "Pharmacy of Oklahoma"
for x in phrase.split():
if x in lst_of_states:
x= x.replace(x, 'State')
print(phrase.split())
现在我唯一能做的就是使用字符串并将其替换为单词“State”。如何用字典中的缩写替换名称?我已经尝试过并想要类似x= x.replace(x, lst_of_abbrv)
但它会出错,因为您显然不能用 dict_keys 替换。
如果您能够解释如何将其应用于数据框的“C”列,则加分
【问题讨论】:
-
x = x.replace(x, statez[x])? -
不要将键和值分开到不同的列表中。只需检查
if x in statez。 -
@BallpointBen 那是我第一次去,但我得到一个 KeyError。
KeyError: 'Oklahoma'在我上面的具体示例中 -
用
if x in lst_of_abbrv:替换if x in lst_of_states: -
另外,您不会看到
phrase中反映的更改...您可以谷歌搜索原因。但要修复它,请执行L = phrase.split()、for (i,x) in enumerate(L):然后L[i] = x.replace(x, statez[x])。然后,打印L而不是phrase.split()
标签: python pandas dictionary replace key-value