ihm*_*all 2 pandas data-cleaning
我在 Pandas 的数据框中有一列缺失值约为 78%。
剩余的 22% 值按以下比率分配给三个标签 - SC、ST、GEN。
SC - 16% ST - 8% GEN - 76%
我需要用上述三个值替换缺失值,以便所有元素的比例保持与上述相同。只要比率保持如上,分配可以是随机的。
我该如何实现?
从这个 DataFrame 开始(只是为了创建类似于你的东西):
import numpy as np
df = pd.DataFrame({'C1': np.random.choice(['SC', 'ST', 'GEN'], p=[0.16, 0.08, 0.76],
size=1000)})
df.loc[df.sample(frac=0.22).index] = np.nan
Run Code Online (Sandbox Code Playgroud)
它产生一个包含 22% NaN 的列,其余的比例与您的相似:
df['C1'].value_counts(normalize=True, dropna=False)
Out:
GEN 0.583
NaN 0.220
SC 0.132
ST 0.065
Name: C1, dtype: float64
df['C1'].value_counts(normalize=True)
Out:
GEN 0.747436
SC 0.169231
ST 0.083333
Name: C1, dtype: float64
Run Code Online (Sandbox Code Playgroud)
现在您可以将 fillna 与 np.random.choice 一起使用:
df['C1'] = df['C1'].fillna(pd.Series(np.random.choice(['SC', 'ST', 'GEN'],
p=[0.16, 0.08, 0.76], size=len(df))))
Run Code Online (Sandbox Code Playgroud)
结果列将具有以下比例:
df['C1'].value_counts(normalize=True, dropna=False)
Out:
GEN 0.748
SC 0.165
ST 0.087
Name: C1, dtype: float64
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1696 次 |
| 最近记录: |