【问题标题】:Python - add a numpy array as column to a pandas dataframe with different lengthPython - 将 numpy 数组作为列添加到具有不同长度的 pandas 数据帧
【发布时间】:2018-06-14 19:46:10
【问题描述】:

我有一个带有多列的 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 |
+----+------+-----+-----+

【问题讨论】:

    标签: python pandas numpy dataframe


    【解决方案1】:

    我认为您可以分配给由相同布尔掩码过滤的新列:

    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]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-09
      • 1970-01-01
      • 2018-12-27
      • 2020-09-11
      • 2017-07-07
      • 2021-09-19
      • 2015-08-24
      • 2018-11-18
      相关资源
      最近更新 更多