【问题标题】:dictionary with two key to dataframe具有两个数据框键的字典
【发布时间】:2017-03-13 10:01:42
【问题描述】:

我正在尝试将带有元组键和列表值的字典转换为数据框,例如 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()})

但我无法将键与字典键()分开。

我希望结果出来

    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]

【问题讨论】:

  • 请检查我对代码所做的编辑是否正确,我删除了一些不正确的空格和单引号。还包括您得到的输出/错误以及所需的输出。

标签: python pandas dictionary


【解决方案1】:

看来你需要来自keysMultiIndexdict

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]

【讨论】:

  • 感谢您的回答,但我需要另一种格式。原谅我可怕的网速,我刚刚修改了我的描述
  • 是的,我想我有更简单的解决方案,请检查编辑后的答案。
【解决方案2】:
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']]

我通过上面的代码解决了,但是我觉得应该有一个简单的方法

【讨论】:

  • 该函数应该从字典中返回数据帧,而不是从另一个 df 中返回 df
猜你喜欢
  • 2021-12-28
  • 2021-08-23
  • 2023-03-16
  • 2019-02-11
  • 1970-01-01
  • 2015-12-22
  • 1970-01-01
  • 1970-01-01
  • 2018-11-10
相关资源
最近更新 更多