gpt4 book ai didi

python - 带有列表/数组的 Pandas fillna

转载 作者:太空宇宙 更新时间:2023-11-04 09:08:48 24 4
gpt4 key购买 nike

有没有一种方便的方法可以用数组或列的(第一个)值填充 na 值?

想象一下下面的 DataFrame:

dfcolors = pd.DataFrame({'Colors': ['Blue', 'Red', np.nan, 'Green', np.nan, np.nan, 'Brown']})

Colors
0 Blue
1 Red
2 NaN
3 Green
4 NaN
5 NaN
6 Brown

我想用来自另一个 DataFrame 或数组的值填充 NaN 值,所以:

dfalt = pd.DataFrame({'Alt': ['Cyan', 'Pink']})

Alt
0 Cyan
1 Pink

当有更多 NaN 时,填充值应该保留一些 NaN。而且当填充值比较多的时候,也不会全部用到。所以我们必须做一些计数:

n_missing = len(dfcolors) - dfcolors.count().values[0]    
n_fill = min(n_missing, len(dfalt))

数字 n_fill 是可以填充的值的数量。

选择可以/应该填充的 NaN 值可以通过以下方式完成:

dfcolors.Colors[pd.isnull(dfcolors.Colors)][:n_fill]

2 NaN
4 NaN
Name: Colors, dtype: object

选择填充值

dfalt.Alt[:n_fill]

0 Cyan
1 Pink
Name: Alt, dtype: object

而他们我被困在了类似的地方:

dfcolors.Colors[pd.isnull(dfcolors.Colors)][:n_fill] = dfalt.Alt[:n_fill]

哪个不起作用...任何提示都很好。

这是我想要的输出:

  Colors
0 Blue
1 Red
2 Cyan
3 Green
4 Pink
5 NaN
6 Brown

NaN值从上到下填充,如果填充值比NaN的多,填充值也从上到下选择

最佳答案

这很糟糕,但是迭代 null 的索引是可行的:

In [11]: nulls = dfcolors[pd.isnull(dfcolors['Colors'])]

In [12]: for i, ni in enumerate(nulls.index[:len(dfalt)]):
dfcolors['Colors'].loc[ni] = dfalt['Alt'].iloc[i]

In [13]: dfcolors
Out[13]:
Colors
0 Blue
1 Red
2 Cyan
3 Green
4 Pink
5 NaN
6 Brown

关于python - 带有列表/数组的 Pandas fillna,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17544649/

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