【问题标题】:Randomly select 10% of elements with '0' value and replace them with np.nan in data frame随机选择 10% 值为 '0' 的元素,并在数据框中用 np.nan 替换它们
【发布时间】:2021-06-08 23:53:40
【问题描述】:

我对 pandas/numpy 还很陌生,虽然这很容易找到,但我找不到。

我想在我的df中随机选择10%的零值并将它们更改为np.nan,然后返回数据集以使用

这是为了模拟我的否定案例的缺失值,因为我的 df 由二进制变量组成,所以我只对增加 10% 的零感兴趣。

我希望这是有道理的!

index_nan = np.random.choice(df.size, 10, replace=False)
 
data.ravel()[index_nan] = np.nan
print(df)

我想这样做,但是(10 是我数据的 10%)但我不知道如何只影响我的 df 中的“0”值

【问题讨论】:

  • 请从intro tour 重复on topichow to ask。 “告诉我如何解决这个编码问题”不是堆栈溢出问题。我们希望您做出诚实的尝试,然后然后就您的算法或技术提出一个具体的问题。 Stack Overflow 并不打算取代现有的文档和教程。你不是简单地“找到”它;你从你已经知道的各个步骤构建它。这就是编程。

标签: python pandas dataframe numpy


【解决方案1】:

好吧,为了回答您的问题,您可以使用以下内容在数据框中显示等于特定值的行:

df.loc[df['column']==VALUE]

您可以计算多少行等于一个值:

(df['column']==VALUE).sum()

如果你使用数据框的索引作为总体,那么使用内置的随机模块对索引进行采样

indices_to_change = random.sample(
    (df['column']==VALUE).index, 
    (df['column']==VALUE).sum() / 10)

df.loc[indices_to_change, 'column'] = np.nan

【讨论】:

  • 啊,谢谢,但这仅适用于系列吗?还是一列?我想为整个数据集做这件事。我试过了,但它不允许我选择多个列。再次抱歉,我是 pandas/numpy 的新手!
  • 当您说“您的数据”的 10% 时,您是指 10% 的行中有 0 出现在一列或多列中吗?还是您打算占总 0 条目的 10%?另外,您的 DataFrame 是否代表观察值(行)和变量(列)?
  • @arnoldhenry,我会在收到您的回复后更新我的答案。
猜你喜欢
  • 2019-03-15
  • 2019-03-06
  • 2023-02-20
  • 2015-05-23
  • 2022-01-20
  • 1970-01-01
  • 2022-08-06
  • 2020-05-23
  • 1970-01-01
相关资源
最近更新 更多