【问题标题】:Changing abbreviated state names with full name用全名更改缩写的州名
【发布时间】:2022-01-04 16:22:22
【问题描述】:

我有一个数据框,其中有一列包含州名。这些名称混合了美国各州的缩写和其他国家/地区的州名。而且,我只想更改美国的州名,而让其他州保持原样。

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)

它按照应有的方式替换了美国各州,但它也将其他国家/地区的州名称替换为 None。我错过了什么?提前致谢。

【问题讨论】:

    标签: python-3.x pandas dictionary


    【解决方案1】:

    如果效率很重要,可以使用states.get,参数与默认值相同:

    df['State'] = df['State'].map(lambda x: states.get(x, x))
    

    mapreplace

    以 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)
    

    【讨论】:

    • 哇,这真的很奇怪。我永远不会猜到! +1
    【解决方案2】:

    您可以使用Series.replace。它可以接受一个字典,其中字典的键是要查找的值,字典的值是替换值。如果在字典中没有找到值,它将保持原样。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多