繁体   English   中英

在 Pandas DataFrame 中删除每列的 nan

[英]Drop nan of each column in Pandas DataFrame

我有一个 dataframe 作为例子:

     A     B     C
0    1
1    1
2    1
3    1     2
4    1     2
5    1     2
6          2     3
7          2     3
8          2     3
9                3
10               3
11               3

我想删除每列的 nan 值以获得结果:

     A     B     C
0    1     2     3
1    1     2     3
2    1     2     3
3    1     2     3
4    1     2     3
5    1     2     3

我有一个简单的方法来做到这一点吗?

您可以为实际上未按数字排序的每一列应用自定义排序 function,它只是将所有 NaN 值移动到列的末尾。 然后, dropna

df = df.apply(lambda x: sorted(x, key=lambda v: isinstance(v, float) and np.isnan(v))).dropna()

Output:

>>> df
     A    B    C
0  1.0  2.0  3.0
1  1.0  2.0  3.0
2  1.0  2.0  3.0
3  1.0  2.0  3.0
4  1.0  2.0  3.0
5  1.0  2.0  3.0

鉴于

>>> df 
      A    B    C
0   1.0  NaN  NaN
1   1.0  NaN  NaN
2   1.0  NaN  NaN
3   1.0  2.0  NaN
4   1.0  2.0  NaN
5   1.0  2.0  NaN
6   NaN  2.0  3.0
7   NaN  2.0  3.0
8   NaN  2.0  3.0
9   NaN  NaN  3.0
10  NaN  NaN  3.0
11  NaN  NaN  3.0

利用

>>> df.apply(lambda s: s.dropna().to_numpy()) 
     A    B    C
0  1.0  2.0  3.0
1  1.0  2.0  3.0
2  1.0  2.0  3.0
3  1.0  2.0  3.0
4  1.0  2.0  3.0
5  1.0  2.0  3.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM