[英]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.