我想用随机值填充 Dataframe 中的NaN
s:
df1 = pd.DataFrame(list(zip(['0001', '0001', '0002', '0003', '0004', '0004'],
['a', 'b', 'a', 'b', 'a', 'b'],
['USA', 'USA', 'USA', 'USA', 'USA', 'USA'],
[np.nan, np.nan, 'Jan', np.nan, np.nan, 'Jan'],
[1,2,3,4,5,6])),
columns=['sample ID', 'compound', 'country', 'month', 'value'])
df1
输出:
sample ID compound country month value
0 0001 a USA NaN 1
1 0001 b USA NaN 2
2 0002 a USA Jan 3
3 0003 b USA NaN 4
4 0004 a USA NaN 5
5 0004 b USA Jan 6
我基于compound
列对数据库进行切片:
df2 = df1.loc[df1.compound == 'a']
df2
输出:
sample ID compound country month value
0 0001 a USA NaN 1
2 0002 a USA Jan 3
4 0004 a USA NaN 5
然后,我尝试使用filler
对不重复的值进行fillna
:
from numpy.random import default_rng
rng = default_rng()
filler = rng.choice(len(df2.month), size=len(df2.month), replace=False)
filler = pd.Series(-abs(filler))
df2.month.fillna(filler, inplace=True)
df2
输出:
sample ID compound country month value
0 0001 a USA -1.0 1
2 0002 a USA Jan 3
4 0004 a USA NaN 5
我希望没有NaN
在出,但实际上没有,为什么?
2条答案
按热度按时间ajsxfq5m1#
问题是您的
filler
索引与df2
不同,因为df2
通过布尔索引是df1
的一部分,所以您可以yrdbyhpb2#
示例
在代码下面运行
输出:
不同指数的NaN填充剂
这可能不一定是原因。如果这不能解决问题,不要仅仅发布代码和目标,创建并提供一个代表数据集最小示例。
https://stackoverflow.com/help/minimal-reproducible-example