Pandas 数据框填充了 "NaN",不是正确的值

Pandas dataframe is filled with "NaN", not correct values

我正在尝试重新格式化 pandas 数据框,如下所示。但是,出现的是 NaN 而不是原始数据框中的值。 代码: df = df.T.reindex(subjects)

来自这里:

                        rating_per_subject
1  {'P1': **4**, 'P2': **1**, 'T1': **2**, 'S1': **5**, 'S2': **5**, ...
2  {'P1': 1, 'P2': 1, 'T1': 5, 'S1': 1, 'S2': 1, ...
3  {'P1': 3, 'P2': 2, 'T1': 4, 'S1': 5, 'S2': 4, ...
4  {'P1': 2, 'P2': 5, 'T1': 5, 'S1': 4, 'S2': 5, ...

为此格式:

      1      2    3     4
P1  **NaN**  NaN  NaN  NaN
P2  **NaN**  NaN  NaN  NaN
T1  **NaN**  NaN  NaN  NaN
S1  **NaN**  NaN  NaN  NaN
S2  **NaN**  NaN  NaN  NaN
R1  **NaN**  NaN  NaN  NaN
R2  **NaN**  NaN  NaN  NaN

为了创建您的源 DataFrame,我:

  1. 创建了以下词典列表:

    tbl = [ {'P1': '**4**', 'P2': '**1**', 'T1': '**2**', 'S1': '**5**', 'S2': '**5**'},
            {'P1':    1,    'P2':    1,    'T1':    5,    'S1':    1,    'S2':    1},
            {'P1':    3,    'P2':    2,    'T1':    4,    'S1':    5,    'S2':    4},
            {'P1':    2,    'P2':    5,    'T1':    5,    'S1':    4,    'S2':    5}]
    

    请注意,第一行中的值用引号引起来(与您的样本不同), 否则会有无效语法。

  2. 创建了 DataFrame:

    df = pd.DataFrame({'rating_per_subject': tbl})
    

请注意,到目前为止,您的 DataFrame 包含 单个 列。 但是由于您的代码包含 T 属性的调用(转换), 源 DataFrame 应该是 "true-2D" 形状,即它应该包含 多个行和列。

在我看来,缺少的步骤是将每一行分解成列,即 字典键应转换为列名和字典值 - 到 列值。

你可以执行:

df2 = df.rating_per_subject.apply(pd.Series)

给出了什么:

      P1     P2     T1     S1     S2
0  **4**  **1**  **2**  **5**  **5**
1      1      1      5      1      1
2      3      2      4      5      4
3      2      5      5      4      5

现在,当您转置此 DataFrame (运行 df2.T) 时,您将得到:

        0  1  2  3
P1  **4**  1  3  2
P2  **1**  1  2  5
T1  **2**  5  4  5
S1  **5**  1  5  4
S2  **5**  1  4  5

假设 subjects = ['P1', 'P2', 'T1', 'S1', 'S2', 'R1', 'R2'].

当你运行df2.T.reindex(subjects)时,你将获得:

        0    1    2    3
P1  **4**    1    3    2
P2  **1**    1    2    5
T1  **2**    5    4    5
S1  **5**    1    5    4
S2  **5**    1    4    5
R1    NaN  NaN  NaN  NaN
R2    NaN  NaN  NaN  NaN

也许这就是您要找的东西?