我有一个如下所示的数据框(df):
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栏中的字典键。它看起来像这样:
dict_names = {1: 'Test', 13: 'Ind Score', 14: 'Successful', 15: 'Cofactor', 20: 'Attempts', etc ...}
我想要做的是将我的dict_names值映射到我的df列c中的dicts列表中的键,所以我有可读的名字。然后,我会将dicts列表(列c),人类可读的名称,转换为我的df中的列名。
我知道我可以通过这样的方式将列c中的dicts转换为不同的列:
df['c'] = df['c'].apply(lambda x : dict(eval(x)))
df_stats = df['c'].apply(pd.Series)
然后我可以用df连接df_stats并删除旧列c。瞧!
但我仍然坚持使用df列c中的dicts列表键来映射dict_names值。
我正在寻找的最终df输出将是这样的:
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
帮助找到我的最终输出方式将不胜感激。
答案 0 :(得分:1)
您可以使用rename
并传递dict
来替换列;名称
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