【问题标题】:Map A Dictionary With Pandas Column使用 Pandas 列映射字典
【发布时间】:2021-12-27 19:51:05
【问题描述】:

我有一个 pandas 数据框列 province,其中包含大写和小写的 USA states and Canada province 名称

df.province

输出

MANITOBA
Alberta
CA
OH

映射所有加拿大省份值的字典

ca_provinces_dic = {
    'Newfoundland and Labrador': 'NL',
    'Prince Edward Island': 'PE',
    'Nova Scotia': 'NS',
    'New Brunswick': 'NB',
    'Quebec': 'QC',
    'Ontario': 'ON',
    'Manitoba': 'MB',
    'Saskatchewan': 'SK',
    'Alberta': 'AB',
    'British Columbia': 'BC',
    'Yukon': 'YT',
    'Northwest Territories': 'NT',
    'Nunavut': 'NU',
}

如何使用处理 case matching 问题的 pandas 将所有 province 值与其各自的短格式映射?

例如 - 我想将所有province column values(小写)与所有dictionary keys(小写)进行比较,并根据匹配项为省列值应用适当的缩写形式(仅在适用的情况下)


我目前对这个问题的尝试。

canada_provinces_dic = {
    'Newfoundland and Labrador': 'NL',
    'Prince Edward Island': 'PE',
    'Nova Scotia': 'NS',
    'New Brunswick': 'NB',
    'Quebec': 'QC',
    'Ontario': 'ON',
    'Manitoba': 'MB',
    'Saskatchewan': 'SK',
    'Alberta': 'AB',
    'British Columbia': 'BC',
    'Yukon': 'YT',
    'Northwest Territories': 'NT',
    'Nunavut': 'NU',
}


def handle_state(data_attr):
  for k, v in canada_provinces_dic.items():
      if data_attr.strip().lower() == k.lower():
        return canada_provinces_dic[k]
  else:
    return data_attr
df['state'] =  df.state.apply(handle_state)

【问题讨论】:

    标签: python python-3.x pandas dataframe dictionary


    【解决方案1】:

    使用Series.mapSeries.fillna

    首先将您的 dict 转换为小写键:

    In [638]: ca_provinces_dic = {k.lower():v for k,v in ca_provinces_dic.items()}
    
    In [659]: df['province'] = df['province'].str.lower().map(ca_province_dict).fillna(df['province'])
    
    In [660]: df
    Out[660]: 
      province
    0       MB
    1       AB
    2       CA
    3       OH
    

    【讨论】:

    • 字典中没有的值应该保持原样,不要转换为 NaN。
    • @gshpychka 编辑了我的答案。谢谢。
    • 工作得很好,谢谢!
    猜你喜欢
    • 2020-09-01
    • 2016-09-02
    • 2021-08-04
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 2023-02-21
    • 2022-12-11
    相关资源
    最近更新 更多