Python-将 numpy 数组作为列添加到不同长度的 pandas 数据框中

标签 python pandas numpy dataframe

我有一个包含多列的 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 中。对于 Col1NaN 的每一行,新列 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/

相关文章:

python - Numpy:根据前一个元素计算?

python - Seaborn regplot 拟合线与 stats.linregress 或 stats 模型的计算拟合不匹配

python - 在python中使用beautifulsoup提取网页的数据丰富节点

python - Pandas 用 NaT 替换 NaN

python - 在 numpy 数组中一次访问 block

python - 我的代码无法识别 `import sklearn`

python - 如何在没有换行符的情况下打印numpy对象

python3/selenium/automation - 查找包含给定字符串的 ID

python - 如何移动 pandas DataFrame 中的多行?

python - 在Python中以不同的步骤转移数据