python - 如何从 Pandas 中的df中随机删除10%的属性值

标签 python pandas

我有一个示例数据集。它有 2000 行和 15 列。最后一列将需要作为分类中的决策类。

我需要随机删除 10% 的属性值。所以列 0-13 中 10% 的值应该是 NA

我写了一个 for 循环。它随机化一个 colNumber (0-13) 和 rowNumber (0-2000) 并将一个值替换为不适用。但我认为(我看到了)这不是一个更快的解决方案。我试图在 pandas 中找到其他东西,而不是核心 python,但找不到任何东西。

也许有人有更好的主意?更多 pandas 解决方案?或者可能是完全不同的东西?

最佳答案

你可以利用pandassample方法。

导入和设置数据

import numpy as np
import pandas as pd

n = 100
data = {
    'a': np.random.random(size=n),
    'b': np.random.choice(list(string.ascii_lowercase), size=n),
    'c': np.random.random(size=n),
}

df = pd.DataFrame(data)

解决方案

for col in df.columns:
    df.loc[df.sample(frac=0.1).index, col] = np.nan

没有for循环的解决方案:

def delete_10(col):
    col.loc[col.sample(frac=0.1).index] = np.nan
    return col

df.apply(delete_10, axis=0)

检查

检查 NaN 值的比例:

df.isnull().sum() / len(df)

输出:

a    0.1
b    0.1
c    0.1
dtype: float64

关于python - 如何从 Pandas 中的df中随机删除10%的属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61017329/

相关文章:

python - 使用 pandas 在数据框中仅保留一条具有给定 ID 的记录

python - 在列中查找与其他数据帧列中的任何其他值匹配的行号

python - 分组数据的平均值

python - 使用 Scapy 获取 TCP 标志

python - 如何在 Pandas 数据框中使用 ast.literal_eval 并处理异常

python - 基于 2 个数据帧的 pandas 高效数据操作

python - 在 Python 中通过套接字发送的字符串一旦 .recv'd 后将不会与等效字符串进行比较

python - 如何编写测量每行(对象)频率的函数 - Python

python - 用python压缩字符

python - Groupby 在 pandas 的另一列上有条件