我有一个示例数据集。它有 2000 行和 15 列。最后一列将需要作为分类中的决策类。
我需要随机删除 10% 的属性值。所以列 0-13
中 10% 的值应该是 NA
。
我写了一个 for 循环。它随机化一个 colNumber
(0-13
) 和 rowNumber
(0-2000
) 并将一个值替换为不适用
。但我认为(我看到了)这不是一个更快的解决方案。我试图在 pandas
中找到其他东西,而不是核心 python,但找不到任何东西。
也许有人有更好的主意?更多 pandas
解决方案?或者可能是完全不同的东西?
最佳答案
你可以利用pandas
的sample
方法。
导入和设置数据
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/