我有一个熊猫数据框,看起来像这样:
Column1 Column2 Column3
0 1 NaN NaN
1 4 NaN NaN
2 NaN 3 NaN
3 NaN 98 NaN
4 NaN NaN 562
5 NaN NaN 742
.
.
.
我将如何删除所有不必要的NaN,并使它看起来像这样
Column1 Column2 Column3
0 1 3 562
1 4 98 742
.
.
.
答案 0 :(得分:2)
运行:
df.apply(lambda col: col.dropna().reset_index(drop=True).astype(int))
仅将一个函数应用于每个列,该函数会在该列中删除 NaN 值。 由于存在 NaN 值列,因此通常为 float 类型, 但我尝试将它们强制转换为 int 。
还请注意,其他解决方案仅在每列包含 相同数量的非NaN值。
要进行检查,请添加以下行:
6 NaN NaN 999
到您的6个初始行,所以现在 Column3 包含 3 个非Nan值, 而其他列-仅 2 。
yatu 的Solution删除了最后一行,而 Quang 的
解决方案 导致 ValueError:数组的长度必须相同。
但是在这种情况下,我的解决方案也可以正常工作,只剩下结尾的 NaN 在“太短”列中。
答案 1 :(得分:1)
您可以dropna
:
df.apply(lambda x: x.dropna().values)
输出:
Column1 Column2 Column3
0 1.0 3.0 562.0
1 4.0 98.0 742.0
答案 2 :(得分:1)
我们可以在链接的帖子中使用justify
:
pd.DataFrame(justify(df.values, invalid_val=np.nan, side='up', axis=0),
columns=df.columns).dropna()
Row1 Row2 Row3
0 1.0 3.0 562.0
1 4.0 98.0 742.0