我有一个包含多列的 pandas 数据框 df
。其中一列是 Col1
,其中包含浮点值或 NaN:
df
+----+------+-----+
| No | Col1 | ... |
+----+------+-----+
| 12 | 10 | ... |
| 23 | NaN | ... |
| 34 | 5 | ... |
| 45 | NaN | ... |
| 54 | 22 | ... |
+----+------+-----+
我在 Col1
上运行一个函数,排除缺失值 (NaN
),如下所示:
StandardScaler().fit_transform(df.loc[pd.notnull(df[Col1]), [Col1]])
想象结果是一个像这样的 numpy.ndarray:
+-----+
| Ref |
+-----+
| 2 |
| 5 |
| 1 |
+-----+
请注意,该数组的长度与原始列 Col1
的长度不同。
我需要一个解决方案将数组 Ref
作为列添加到 df
中。对于 Col1
为 NaN
的每一行,新列 Ref
也获得 NaN
。
所需的输出如下所示:
+----+------+-----+-----+
| No | Col1 | ... | Ref |
+----+------+-----+-----+
| 12 | 10 | ... | 2 |
| 23 | NaN | ... | NaN |
| 34 | 5 | ... | 5 |
| 45 | NaN | ... | NaN |
| 54 | 22 | ... | 1 |
+----+------+-----+-----+
最佳答案
我认为您可以分配给由相同 bool 掩码过滤的新列:
from sklearn.preprocessing import StandardScaler
mask = df['Col1'].notnull()
df.loc[mask, 'Ref'] = StandardScaler().fit_transform(df.loc[mask, ['Col1']])
print (df)
No Col1 Ref
0 12 10.0 -0.327089
1 23 NaN NaN
2 34 5.0 -1.027992
3 45 NaN NaN
4 54 22.0 1.355081
详细信息:
print (StandardScaler().fit_transform(df.loc[mask, ['Col1']]))
[[-0.32708852]
[-1.02799249]
[ 1.35508101]]
关于Python-将 numpy 数组作为列添加到不同长度的 pandas 数据框中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50856752/