首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在dataframe列中将键从dict映射到dicts列表

在dataframe列中将键从dict映射到dicts列表
EN

Stack Overflow用户
提问于 2017-11-20 17:07:49
回答 1查看 140关注 0票数 0

我有一个如下所示的dataframe(df):

代码语言:javascript
复制
         a   b                                              c
1    35-23  RB   {'1': '1', '13': '15', '14': '30', '20': '3'}
2    24-10  RB              {'1': '1', '13': '17', '14': '86'}
3    26-30  RB              {'1': '1', '13': '14', '14': '54'}  
4     14-7  RB                                              []
5    24-27  RB   {'1': '1', '13': '20', '14': '94', '15': '1'}
6    38-52  RB     {'1': '1', '70': '3', '72': '1', '84': '1'}
7    False  RB   {'1': '1', '70': '4', '71': '1', '72': '0.5'}
8    15-20  RB                                              []
9    30-17  RB                                              []

我还有一本字典给出了人类可读的名字(大约。100键,值对)到c列中的字典键。

代码语言:javascript
复制
dict_names = {1: 'Test', 13: 'Ind Score', 14: 'Successful', 15: 'Cofactor', 20: 'Attempts', etc ...}

我想要做的是将我的dict_names值映射到df第c列中的dicts列表中的键,这样我就有了可读的名称。然后,我会将dicts列表(c列)的键(人类可读的名称)转换为df中的列名。

我知道我可以通过这样的操作将C列中的分词转换为不同的列:

代码语言:javascript
复制
df['c'] = df['c'].apply(lambda x : dict(eval(x)))
df_stats = df['c'].apply(pd.Series)

然后,我可以将df_stats与df连接起来,并删除原来的列c.oila!

但是,我不得不用df第c列中的dicts列表键映射dict_names值。

我正在寻找的最终df输出如下所示:

代码语言:javascript
复制
         a   b  Test    Ind Score   Successful      Cofactor       Attempts ....
1    35-23  RB      1          15           30           NaN              3
2    24-10  RB      1          17           86           NaN            NaN  
3    26-30  RB      1          17           86           NaN            NaN              
4     14-7  RB    NaN         NaN          NaN           NaN            NaN
5    24-27  RB      1          20           94             1            NaN
6    38-52  RB      1          NaN         NaN           NaN            NaN
7    False  RB      1          NaN         NaN           NaN            NaN
8    15-20  RB    NaN          NaN         NaN           NaN            NaN
9    30-17  RB    NaN          NaN         NaN           NaN            NaN 

帮助找到我的方式,我的最后输出将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-20 17:15:55

您可以使用rename并传递一个dict来替换列;

代码语言:javascript
复制
from ast import literal_eval 
df['c'] = df['c'].apply(literal_eval) 
#dd={'1': 'Test', '13': 'Ind Score', '14': 'Successful', '15': 'Cofactor', '20': 'Attempts'}
dd= {str(k):v for k,v in dict_names.items()}#change
pd.concat([df.drop('c',1),df['c'].apply(pd.Series).rename(columns=dd)],1)

Out[1320]: 
       a   b Test Ind Score Successful Attempts
0  35-23  BR    1        15         30        3
1  24-10  BR    1        17         86      NaN
2  26-30  BR    1        14         54      NaN
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47397396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档