首页 > 解决方案 > 如何将字典转换为具有列中所有键的数据框

问题描述

def weights():
    saved = {}
    for i in range(len(bread_pairs["key_id"])):
        drawing = np.array(bread_pairs['bitmap'][i], dtype=np.uint8)
        new_test_cnn = drawing.reshape(1, 28, 28, 1).astype('float32')
        new_cnn_predict = model.predict(new_test_cnn, batch_size=32, verbose=0)
        w = model.layers[8].get_weights()
        w = list(w[0].flatten())
        saved[bread_pairs["key_id"][i]] = w
    return saved

我有这个函数,它创建一个 key_ids 字典并将它们映射到长度为 200 的值的关联列表。例如,我的字典看起来像saved = {key_id_1: [1,2,3...200], key_id_2: [1,2,...,200], ....} 我想把这个字典变成一个数据框,其中有一列 key_ids 和每个元素在关联列表中的 200 成为它自己的列。所以总共有 201 列,其中第一列是第一个 key_id,然后第二列是列表的第一个元素,第三列是列表的第二个元素,依此类推。然后第二行第一列是第二个key_id,然后第二行第二列是key_id的第二个列表的第一个元素,依此类推。有没有办法将此字典转换为df?我有 10000 个 key_id,尺寸为 10000x201。谢谢!

标签: pythonpandasdataframedictionary

解决方案


  • 使用with参数将其加载dict到 DataFrame 中,并使用pandas.DataFrame.from_dictorient.reset_index()
    • 这将根据要求创建 DataFrame,但是,我建议将键保留为索引,这样可以更轻松地执行计算和处理特定行。
  • 如果列应命名为0...201,则使用df.columns = list(range(202))pandas.DataFrame.rename重命名特定列。
import pandas as pd

# test data
saved = {'key_id_1': list(range(201)), 'key_id_2': list(range(201))}

# create the DataFrame
df = pd.DataFrame.from_dict(saved, orient='index')

# reset the index
df = df.reset_index()

# display(df)
      index  0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99  100  101  102  103  104  105  106  107  108  109  110  111  112  113  114  115  116  117  118  119  120  121  122  123  124  125  126  127  128  129  130  131  132  133  134  135  136  137  138  139  140  141  142  143  144  145  146  147  148  149  150  151  152  153  154  155  156  157  158  159  160  161  162  163  164  165  166  167  168  169  170  171  172  173  174  175  176  177  178  179  180  181  182  183  184  185  186  187  188  189  190  191  192  193  194  195  196  197  198  199  200
0  key_id_1  0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99  100  101  102  103  104  105  106  107  108  109  110  111  112  113  114  115  116  117  118  119  120  121  122  123  124  125  126  127  128  129  130  131  132  133  134  135  136  137  138  139  140  141  142  143  144  145  146  147  148  149  150  151  152  153  154  155  156  157  158  159  160  161  162  163  164  165  166  167  168  169  170  171  172  173  174  175  176  177  178  179  180  181  182  183  184  185  186  187  188  189  190  191  192  193  194  195  196  197  198  199  200
1  key_id_2  0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99  100  101  102  103  104  105  106  107  108  109  110  111  112  113  114  115  116  117  118  119  120  121  122  123  124  125  126  127  128  129  130  131  132  133  134  135  136  137  138  139  140  141  142  143  144  145  146  147  148  149  150  151  152  153  154  155  156  157  158  159  160  161  162  163  164  165  166  167  168  169  170  171  172  173  174  175  176  177  178  179  180  181  182  183  184  185  186  187  188  189  190  191  192  193  194  195  196  197  198  199  200

替代实施

  • 用 创建 DataFrame,用pandas.DataFrame转置 DataFrame pandas.DataFrame.T,然后用 重置.reset_index()
df = pd.DataFrame(saved)
df = df.T.reset_index()

推荐阅读