python - 使用 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',
}
如何province
使用处理问题的 pandas 将所有值映射到它们各自的短格式case matching
?
例如 - 我想将所有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)
解决方案
首先将您的 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
推荐阅读
- php - 异常无法被捕获块捕获 - Yii2
- vb.net - 表单边框样式设置为无,但标题栏仍然存在
- excel - Excel VBA 提取 url 形式 src 或 href
- javascript - 使用 selenium-webdriver 在 nodejs 中截取纵向 pdf 网页的屏幕截图
- angular - Angular 反应式表单:使用单个 formControlName 同步多个输入
- java - 我对 jenkins 插件的工作原理有疑问
- asp.net - 如何使用 SOAP 推送数据
- reactjs - 如何通过在分页旁边添加新字段来自定义数据网格页脚
- wordpress - wp_wpr_rucss_resources 表具有巨大的大小
- c# - Kaizala API:向成员发送消息