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,我:
创建了以下词典列表:
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}]
请注意,第一行中的值用引号引起来(与您的样本不同),
否则会有无效语法。
创建了 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
也许这就是您要找的东西?
我正在尝试重新格式化 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,我:
创建了以下词典列表:
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}]
请注意,第一行中的值用引号引起来(与您的样本不同), 否则会有无效语法。
创建了 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
也许这就是您要找的东西?