首页 > 解决方案 > 使用 Python 将数据帧的行与字典配对

问题描述

如果我使用以下行,我正在尝试将 pandas 数据框(从 Excel 文档创建)的行配对到字典中:

[in:] dict = dict(zip(df.loc[1], df.iloc[2]))
[out:] {'Value1': nan, 'Value2': 'Menu', 'Value3': 'Select', nan: nan, nan: nan}

我可以将索引 1 和 2 的行放入字典中,我希望脚本执行并像这样对数据行进行配对,即从第 1 行和第 2 行、第 3 行和第 4 行、第 5 行创建的字典6等,但无论我尝试什么,我都无法做到这一点,任何建议表示赞赏!

标签: pythondataframe

解决方案


这是我写的一个小函数来实现你所需要的

import pandas as pd

def toDict(df : pd.DataFrame, indices : list):
    DICT = {}
    DATA_SLICE = df.iloc[indices]
    
    for COL in df.columns:
        DICT[COL] = list(DATA_SLICE[COL])

    return DICT

这是我正在使用的数据

>>> data
    Motor Screw  Pgain  Vgain     Class
0       E     E      5      4  0.281251
1       B     D      6      5  0.506252
2       D     D      4      3  0.356251
3       B     A      3      2  5.500033
4       D     B      6      5  0.356251
..    ...   ...    ...    ...       ...
162     B     C      3      2  4.499986
163     B     E      3      1  3.699967
164     C     D      4      3  0.956256
165     A     B      3      2  4.499986
166     A     A      6      5  0.806255

假设我想要索引1, 3, 163,中的数据164作为dict

>>> toDict(data, [1, 3, 163, 164])
{'Motor': ['B', 'B', 'B', 'C'], 'Screw': ['D', 'A', 'E', 'D'], 'Pgain': [6, 3, 3, 4], 'Vgain': [5, 2, 1, 3], 'Class': [0.5062525, 5.500033, 3.6999667, 0.9562556999999999]}

或者4162

>>> toDict(data, [4, 162])
{'Motor': ['D', 'B'], 'Screw': ['B', 'C'], 'Pgain': [6, 3], 'Vgain': [5, 2], 'Class': [0.35625148, 4.499986]}

要不就166

>>> toDict(data, [166])
{'Motor': ['A'], 'Screw': ['A'], 'Pgain': [6], 'Vgain': [5], 'Class': [0.8062545999999999]}

推荐阅读