gpt4 book ai didi

python - 基于默认值列替换多列中的 NaN 的最有效方法是什么?

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

我有一个类似的 DataFrame

import pandas as pd
import numpy as np

df = pd.DataFrame( { 'val1': [1,np.nan,3], 'val2': [np.nan,5,6], 'val3': [7,np.nan,8], 'default': [ 42,43,44 ] } )

   default  val1  val2  val3
0 42 1 NaN 7
1 43 NaN 5 NaN
2 44 3 6 8

[3 rows x 3 columns]

我想将每个 NaN 替换为“默认”列中相应行中给出的默认值。

我可以使用 DataFrame.fillna 在 for 循环中按列执行此操作

for col in [ 'val1', 'val2' ]:
df[ col ] = df[ col ].fillna( df['default'] )

产生了想要的结果

   default  val1  val2  val3
0 42 1 42 7
1 43 43 5 43
2 44 3 6 8

我想知道是否有一个非for循环并且可能更有效的解决方案?我的 DataFrame 可能包含数百列和数万行。

最佳答案

请务必使用双括号来指示 df[['default']] 是 DataFrame 而不是 Series,否则您的结果将与预期输出不匹配。

>>> df.fillna(df[['default']].values)
default val1 val2 val3
0 42 1 42 7
1 43 43 5 43
2 44 3 6 8

在 pandas 16.1+ 中,您需要为每一列传递一个 Series,这可以使用字典理解来构建。

defaults = df['default']
>>> df.fillna({col: defaults for col in df})
default val1 val2 val3
0 42 1 42 7
1 43 43 5 43
2 44 3 6 8

关于python - 基于默认值列替换多列中的 NaN 的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32242396/

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