簡體   English   中英

有沒有一種簡單的方法可以在 Pandas 中自定義填充 null 值?

[英]Is there an easy way to custom fill null values in Pandas?

我有以下 DataFrame:

     A    B    C    D
0  0.0  0.0  0.0  0.0
1  1.0  1.0  1.0  1.0
2  NaN  2.0  2.0  2.0
3  NaN  3.0  3.0  3.0
4  NaN  4.0  4.0  NaN
5  NaN  NaN  5.0  NaN
6  NaN  NaN  6.0  NaN

我正在努力使用這些數據生成可視化效果,我需要以非常具體的方式填充 null 值。 我想為每一列重復循環現有值,直到 null 值都被填滿,這樣 DataFrame 看起來像這樣:

     A    B    C    D
0  0.0  0.0  0.0  0.0
1  1.0  1.0  1.0  1.0
2  0.0  2.0  2.0  2.0
3  1.0  3.0  3.0  3.0
4  0.0  4.0  4.0  0.0
5  1.0  0.0  5.0  1.0
6  0.0  1.0  6.0  2.0

Pandas有什么方便的方法嗎?

您可以在獲取要迭代的值的每一列上apply自定義 function,然后將它們擴展到 dataframe 的全長。這可以使用np.resize完成,如下所示:

def f(x):
    vals = x[~x.isnull()].values
    vals = np.resize(vals, len(x))
    return vals
    
df = df.apply(f, axis=0)

結果:

     A    B    C    D
0  0.0  0.0  0.0  0.0
1  1.0  1.0  1.0  1.0
2  0.0  2.0  2.0  2.0
3  1.0  3.0  3.0  3.0
4  0.0  4.0  4.0  0.0
5  1.0  0.0  5.0  1.0
6  0.0  1.0  6.0  2.0

一種選擇是使用 for 循環; 假設 NaN 位於每列的末尾(如果有的話)。 使用np.place填充空值:

 [np.place(df[col].to_numpy(), 
           df[col].isna(), 
           df[col].dropna().array) 
   for col in df 
   if df[col].hasnans]

[None, None, None]

df
     A    B    C    D
0  0.0  0.0  0.0  0.0
1  1.0  1.0  1.0  1.0
2  0.0  2.0  2.0  2.0
3  1.0  3.0  3.0  3.0
4  0.0  4.0  4.0  0.0
5  1.0  0.0  5.0  1.0
6  0.0  1.0  6.0  2.0

注意np.place是就地操作,不需要賦值。

做就是了

df = pd.DataFrame(....).fillna(0.0)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM