我有一个如下所示的dataframe(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列中的分词转换为不同的列:
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输出如下所示:
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 帮助找到我的方式,我的最后输出将不胜感激。
发布于 2017-11-20 17:15:55
您可以使用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 NaNhttps://stackoverflow.com/questions/47397396
复制相似问题