gpt4 book ai didi

python - 为分类数据填充多个空值

转载 作者:太空宇宙 更新时间:2023-11-04 05:56:31 25 4
gpt4 key购买 nike

我想知道是否有一种 pythonic 方法可以通过从唯一值的分布中随机选择来填充分类数据的空值。基本上根据列中值的现有分布按比例/随机填充分类空值...

-- 下面是我已经在做的一个例子

--为了节省时间,我使用数字作为类别,我不确定如何随机输入字母

import numpy as np
import pandas as pd
np.random.seed([1])
df = pd.DataFrame(np.random.normal(10, 2, 20).round().astype(object))
df.rename(columns = {0 : 'category'}, inplace = True)
df.loc[::5] = np.nan
print df

category
0 NaN
1 12
2 4
3 9
4 12
5 NaN
6 10
7 12
8 13
9 9
10 NaN
11 9
12 10
13 11
14 9
15 NaN
16 10
17 4
18 9
19 9

这就是我目前输入值的方式

df.category.value_counts()

9 6
12 3
10 3
4 2
13 1
11 1

df.category.value_counts()/16

9 0.3750
12 0.1875
10 0.1875
4 0.1250
13 0.0625
11 0.0625

# to fill categorical info based on percentage
category_fill = np.random.choice((9, 12, 10, 4, 13, 11), size = 4, p = (.375, .1875, .1875, .1250, .0625, .0625))
df.loc[df.category.isnull(), "category"] = category_fill

最终输出成功,只需要花点时间写

df.category.value_counts()

9 9
12 4
10 3
4 2
13 1
11 1

是否有更快的方法或可用于此目的的函数?

感谢所有帮助!

最佳答案

你可以使用 stats.rv_discrete :

from scipy import stats

counts = df.category.value_counts()
dist = stats.rv_discrete(values=(counts.index, counts/counts.sum()))
fill_values = dist.rvs(size=df.shape[0] - df.category.count())
df.loc[df.category.isnull(), "category"] = fill_values

编辑:对于一般数据(不限于整数),您可以:

dist = stats.rv_discrete(values=(np.arange(counts.shape[0]), 
counts/counts.sum()))
fill_idxs = dist.rvs(size=df.shape[0] - df.category.count())
df.loc[df.category.isnull(), "category"] = counts.iloc[fill_idxs].index.values

关于python - 为分类数据填充多个空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27474439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com