![](/img/trans.png)
[英]How can I import field names from a list or dictionary using prettytable in python
[英]How can I standardize names in Python using a dictionary map?
我有很多调查结果数据,其中一栏询问用户来自哪个州。 例如,有些人写了“ VA”,另一些人写了“ Virginia”
我本来希望使用词典地图,但是事情进展得不太顺利。 有人对我有什么建议吗? 我对Python还是比较陌生,因此我仍在尝试摆脱困境。
这是我尝试过的:
abv = {"Virginia": "VA", "Maryland": "MD",
"West Virginia": "WV", "Pennsylvania": "PA"}
abv2 = dict(map(reversed, abv.items()))
survey['New State'] = survey.State.map(abv2)
survey
有些人输入“ Virginia”,其他人输入“ VA”。 我只想要缩写版本。
假设您的DataFrame如下所示:
>>> import pandas as pd
>>> survey = pd.DataFrame(
... ["Virginia", "VA", "VA", "Penns.", "PA", "Pennsylvania"],
... columns=["State"]
... )
>>> survey
State
0 Virginia
1 VA
2 VA
3 Penns.
4 PA
5 Pennsylvania
您构造的初始映射可以是长格式名称到规范缩写的映射。
>>> to_abbrev = {
... "Virginia": "VA",
... "Pennsylvania": "PA",
... "Penns.": "PA",
... }
然后,使用缩写词本身进行更新:
>>> to_abbrev.update({v: v for v in to_abbrev.values()})
>>> to_abbrev
{'Virginia': 'VA',
'Pennsylvania': 'PA',
'Penns.': 'PA',
'VA': 'VA',
'PA': 'PA'}
最后,调用.map()
获得结果:
>>> survey["State"].map(to_abbrev)
0 VA
1 VA
2 VA
3 PA
4 PA
5 PA
Name: State, dtype: object
值得说明的是半显而易见的:您的to_abbrev
必须是完整的映射; 否则,缺失值将为NaN:
>>> survey.append({"State": "Wisconsin"}, ignore_index=True)["State"].map(to_abbrev)
0 VA
1 VA
2 VA
3 PA
4 PA
5 PA
6 NaN
Name: State, dtype: object
正如评论中所建议的,毫无疑问,这里有一些库旨在为您建立更全面的映射关系,同时考虑诸如常见的错别字和小的语法差异(例如“ DC”与“ DC”)。
如果您确实无法验证用户输入的前端,则可以轻松使用字典的get
方法,并提供默认值作为后备:
def fix(user_input):
mapping = {"Virginia": "VA", "Maryland": "MD",
"West Virginia": "WV", "Pennsylvania": "PA"}
return mapping.get(user_input, user_input)
print(fix("Virginia")) # >> VA
print(fix("VA")) # >> VA
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.