【问题标题】:Replace null values in pandas data frame column with 2D np.zeros() array用 2D np.zeros() 数组替换 pandas 数据框列中的空值
【发布时间】:2022-01-24 03:07:14
【问题描述】:

假设如下数据框:

import pandas as pd
import numpy as np

vals = [1, 2, 3, 4, 5]

df = pd.DataFrame({'val': vals})
df['val'][[0, 3]] = np.nan

给予:

    val
0   NaN
1   2.0
2   3.0
3   NaN
4   5.0

我需要能够用 2D numpy 零数组替换 val 列中的 NaN 值。当我执行以下操作时:

z = np.zeros((10, 10))

df['val'][df['val'].isnull()] = z

数组被转换为值为 0.0 的标量:

    val
0   0.0
1   2.0
2   3.0
3   0.0
4   5.0

我真的需要维护数组(在这种情况下,每个 NaN 值 - 来自原始数据帧的第 0 行和第 3 行 - 应替换为 10x10 的零数组)。我尝试先转换为object 类型

df = df.astype(object)
df['val'][df['val'].isnull()] = z

没有成功。哇哇哇

【问题讨论】:

  • 请您添加您预期输出的样本吗?
  • 从例子中看的很清楚了吧?
  • 那么对于val 中的0,你想要z 的第0 个数组,对于val 中的3,你想要来自z 的第3 项吗?
  • 在下面查看我非常简单的答案...

标签: python arrays pandas dataframe numpy


【解决方案1】:

这是由对象数据类型引起的,我们有办法使用fillna

df.val.fillna(dict(zip(df.index[df['val'].isnull()],[z]*df['val'].isnull().sum())),inplace=True)
df
                                                 val
0  [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...
1                                                2.0
2                                                3.0
3  [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...
4                                                5.0

【讨论】:

  • 差不多,但是这会将值替换为形状为(10,) 的数组。我真的需要用z 替换它,它的形状是(10,10) - 一个二维数组。试试df['val'][0].shape
  • @JmeCS 检查更新
  • 非常感谢!这很粗糙。我真的不清楚为什么它首先将数组结构降为标量......
  • @JmeCS 检查我的答案。它更简单,并且可能对您有用。
  • @richardec 我赞成它,但不幸的是它不适用于我的实际问题。不清楚为什么。在这里复制太复杂了,但您的解决方案肯定适用于虚拟问题。
【解决方案2】:

你真的很亲密。将数据框的 dtype 更改为 object 并将 = z 更改为 = [z]

df = df.astype(object)
df.loc[df['val'].isna(), 'val'] = [z]

输出:

>>> df
                                                 val
0  [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...
1                                                2.0
2                                                3.0
3  [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...
4                                                5.0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-29
    • 2021-01-19
    • 2017-03-23
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    相关资源
    最近更新 更多