Pandas:删除所有列中的NaN值

4

我有一个数据框,里面有很多空记录:

Col_1    Col_2      Col_3
10         5          2
22         7          7
3         9          5       
4         NaN       NaN
5         NaN       NaN
6         4         NaN
7         6          7
8         10        NaN
12        NaN        1

我希望能够删除所有列中的NaN值。正如你所看到的,每个列都有不同数量的行。所以,我想要得到这样的结果:

Col_1    Col_2      Col_3
10         5          2
22         7          7
3          9          5       
4          4          7
6          6          1
7         10          
8                 
12    

我尝试了

filtered_df = df.dropna(how='any')

但是它会移除数据框中的所有记录。我该怎么做?

但你想让剩下的元素是什么? 数据帧必须具有相同数量的元素。 - Ami Tavory
请查看我的第二部分回答,但将“left”改为“up”。 - cs95
@coldspeed,我不太确定你在另一个问题中的回答或其与此问题的相关性。数据框架适用于表格数据。如果数据是不规则矩阵,则可能不是正确的数据结构。 - Ami Tavory
1
@AmiTavory 好的,也许该怎么做并不明显,所以我重新打开了问题并回答了它。 - cs95
完成了!谢谢@coldspeed的提醒。 - user_01
4个回答

4

您也可以在系列列表上使用pd.concat

请注意,如果您删除dtype=object选项,则由于NaN元素,列Col_2Col_3不可避免地为float类型。

res = pd.concat([df[x].dropna().reset_index(drop=True) for x in df], axis=1)

print(res)

   Col_1  Col_2  Col_3
0     10    5.0    2.0
1     22    7.0    7.0
2      3    9.0    5.0
3      4    4.0    7.0
4      5    6.0    1.0
5      6   10.0    NaN
6      7    NaN    NaN
7      8    NaN    NaN
8     12    NaN    NaN

3
使用Divakar的justify函数—
df[:] = justify(df.values, invalid_val=np.nan, axis=0, side='up')
df = df.fillna('')

print(df)

   Col_1 Col_2 Col_3
0   10.0     5     2
1   22.0     7     7
2    3.0     9     5
3    4.0     4     7
4    5.0     6     1
5    6.0    10      
6    7.0            
7    8.0            
8   12.0            

技术熟练度令人印象深刻。基本上,我不太喜欢它,原因如我在答案中所概述的那样。 - Ami Tavory

3
正如您所见,每个列具有不同数量的行。
DataFrame是一种表格数据结构: 您可以查找索引和列,并找到该值。如果每列的行数不同,则索引是无意义的且会误导。字典可能是更好的替代方案:
{c: df[c].dropna().values for c in df.columns}

或者

{c: list(df[c]) for c in df.columns}

1
我完全100%同意这里的每个字。我只是认为像这样的大多数家政问题都是由于显示/表示引起的,对于这样的问题,我认为这些问题是可以接受的。否则,建议劝说提问者揭示XY问题中的X... :)... - cs95

0

你也可以试试这个

censos_data.dropna(subset=censos_data.columns,inplace=True)


请查看 https://stackoverflow.com/editing-help#comment-formatting 了解如何格式化您的答案。 - Mahendra Yadav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接