我有一個資料框,其中有一列包含州名。這些名稱混合了美國各州的縮寫和其他國家/地區的州名。而且,我只想更改美國州的名稱,而讓其他州保持原樣。
Data
Country State
1 United States MI
2 United States PA
3 New Zealand Auckland
4 France ?le-de-France
5 United States FL
我試過這個代碼:
states = {
'AK': 'Alaska',
'AL': 'Alabama',
'AR': 'Arkansas',
'AS': 'American Samoa',
'AZ': 'Arizona',
'CA': 'California',
'CO': 'Colorado',
'CT': 'Connecticut',
'DC': 'District of Columbia',
'DE': 'Delaware',
.
.
.
}
states = {state: abbrev for state, abbrev in states.items()}
Data['State_full'] = Data['State'].map(states)
它按應有的方式替換了美國各州,但也用無替換了其他國家/地區的州名。我錯過了什么?提前致謝。
uj5u.com熱心網友回復:
您可以使用Series.replace. 它可以采用 dict,其中 dict 的鍵是要查找的值,而 dict 的值是替換值。如果在 dict 中找不到值,它將保持原樣。
df['State'] = df['State'].replace(states)
輸出:
>>> df
Country State
1 United States Minnesota
2 United States Pennsylvania
3 New Zealand Auckland
4 France ?le-de-France
5 United States Florida
uj5u.com熱心網友回復:
如果效率很重要,您可以使用states.get與默認值相同的引數:
df['State'] = df['State'].map(lambda x: states.get(x, x))
map 比 replace
100k 行的示例,map速度快兩倍:
%%timeit
df['State'].map(lambda x: states.get(x, x))
# 13.3 ms ± 501 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%%timeit
df['State'].replace(states)
# 30.7 ms ± 1.57 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/366895.html
上一篇:dict_keys和dict_values附加到現有資料框中的列
下一篇:通過坐標在字典中查找值
