【发布时间】:2021-07-14 01:13:01
【问题描述】:
给定一个包含country、topic、industry 列的数据框,当列由列表组成时,我如何将字典映射到每一列?
例如,国家/地区的字典包含数百个国家和地区代码的映射:
>> cnt_dict = {'AARCT': 'ANTARTICA', 'ABDBI': 'ABU DHABI', 'AFGH': 'AFGHANISTAN' ... 'ZAIRE': 'DEMOCRATIC REPUBLIC OF THE CONGO', 'ZAMBIA': 'ZAMBIA', 'ZIMBAB': 'ZIMBABWE'}
df 对应的一列是国家代码列表:
>>df['country'].head(5)
country
[ANDO, COOKIS, INDOCH]
[IRAN]
[MALAG, BERM, WESTW, USAWI]
[]
[ECU, FALK, OMAN]
我如何将 cnt_dic 映射到 df['country'] 以将每个列表中的每个值转换为其映射的字典值,以便输出将是(使用伪代码):
>> df['country'] = df['country'].map(cnt_dic to lists)
>> df['country'].head(5)
country
[ANDORRA, COOK ISLANDS, INDO-CHINA]
[IRAN]
[MADAGASCAR, BERMUDA, WESTERN WORLD, UNITED STATES WISCONSIN]
[]
[ECUADOR, FALKLAND ISLANDS, OMAN]
我尝试了df['country'] = df['country'].apply(lambda x: list(map(lambda y:cnt_dic.get(y, None), x))),但我只在所有列表中获得了None 值,并且没有其他任何工作。
另外,如果可能的话,最终的数据帧非常大,所以速度很重要。
【问题讨论】:
-
你试过
df['country'] = df['country'].apply(lambda x: [cnt_dict.get(i) for i in x])
标签: python pandas dictionary mapping