将字典映射到数据框列中的列表

时间:2021-04-19 20:15:45

标签: python pandas dictionary mapping

给定一个包含 countrytopicindustry 列的数据框,当列由列表组成时,我如何将字典映射到每一列?

例如,country 的字典包含数百个国家和地区代码的映射:

>> 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 值,其他的都不起作用。

另外,如果可能的话,最终的数据帧非常大,所以速度很重要。

2 个答案:

答案 0 :(得分:1)

@trianta2 @DrakeMurdoch 只是为了确保我尝试制作一个示例,并且它工作正常

import pandas as pd
df = pd.DataFrame({'d': [['A', 'B'], ['B', 'C'], ['A']]})
df
        d
0  [A, B]
1  [B, C]
2     [A]
d = {'A':2, 'B':0, 'C':4}
df['k'] = df['d'].apply(lambda x: [d[i] for i in x])

#output
df
        d       k
0  [A, B]  [2, 0]
1  [B, C]  [0, 4]
2     [A]     [2]

答案 1 :(得分:0)

问题是你的 country 列是一系列列表,所以你需要遍历每行列表中的元素,并使用该元素作为 cnt_dict 中的键。 @nidabdella 的评论就是这样做的。但是,列表不可散列,因此您应该得到 TypeError 而不是 None...

相关问题