Python 数据帧双键字典
我正在尝试将具有元组键和列表值的字典转换为dataframe,如key1、key2、value。这是字典:Python 数据帧双键字典,python,pandas,dictionary,Python,Pandas,Dictionary,我正在尝试将具有元组键和列表值的字典转换为dataframe,如key1、key2、value。这是字典: dict_f = {'(4312,5135)':[0,0.11,0.22],'(1515,32)':[0.92,0.11,0.65],'(42,56)':[0.2,0.5,0.23]} 我试着这样做: pd.DataFrame({'Keys': dict_f.keys(), 'Values': dict_f.values()}) 但是我无法将键与字典键分开() 我希望结果是这样的
dict_f = {'(4312,5135)':[0,0.11,0.22],'(1515,32)':[0.92,0.11,0.65],'(42,56)':[0.2,0.5,0.23]}
我试着这样做:
pd.DataFrame({'Keys': dict_f.keys(), 'Values': dict_f.values()})
但是我无法将键与字典键分开()
我希望结果是这样的
key1 key2 value
0 4312 5135 [0,0.11,0.22]
1 1515 32 [0.92,0.11,0.65]
2 42 56 [0.2,0.5,0.23]
似乎您需要从
dict
的keys
中使用multi-index
:
df = pd.DataFrame(dict_f)
df.columns = df.columns.str.strip('()').str.split(',', expand=True)
print (df)
1515 42 4312
32 56 5135
0 0.92 0.20 0.00
1 0.11 0.50 0.11
2 0.65 0.23 0.22
print (df.columns)
MultiIndex(levels=[['1515', '42', '4312'], ['32', '5135', '56']],
labels=[[0, 1, 2], [0, 2, 1]])
如果需要其他格式:
s = pd.Series(dict_f)
#if keys are strings, convert to tuples
s.index = s.index.str.strip('()').str.split(',', expand=True)
print (s)
1515 32 [0.92, 0.11, 0.65]
42 56 [0.2, 0.5, 0.23]
4312 5135 [0, 0.11, 0.22]
dtype: object
df1 = s.reset_index()
df1.columns = ['key1','key2','features']
print (df1)
key1 key2 features
0 1515 32 [0.92, 0.11, 0.65]
1 42 56 [0.2, 0.5, 0.23]
2 4312 5135 [0, 0.11, 0.22]
我用上面的代码解决了这个问题,但我认为必须有一个简单的方法检查我对代码所做的编辑是否正确请,我删除了一些不正确的空格和单引号。还包括您得到的输出/错误以及所需的输出。谢谢您的回答,但我需要另一种格式。请原谅我糟糕的网速,我刚刚修改了我的描述,我想我有更简单的解决方案,请检查编辑后的答案。该函数应该从字典返回数据帧,而不是从另一个df返回df
def pkl_dict_to_df(df):
data_df = pd.DataFrame({'keys': df.keys(), 'features': df.values()})
data_df['key1'] = data_df['keys'].apply(lambda x: x[0])
data_df['key2'] = data_df['keys'].apply(lambda x: x[1])
return data_df[['key1','key2','features']]