如果我的问题已经得到解答,请接受我的道歉。我试图找到一个解决方案,但我能找到的只是在数据帧中为所有NaN提供解决方案。 我的问题是我有一个包含6列和500行的数据帧。我需要检查在任何特定行中是否所有值都是NaN,以便我可以从我的数据集中删除它们。第2行,第6行和第2行的示例7包含从col1到col6的所有Nan:
Col1 Col2 Col3 Col4 Col5 Col6
12 25 02 78 88 90
Nan Nan Nan Nan Nan Nan
Nan 35 03 11 65 53
Nan Nan Nan Nan 22 21
Nan 15 93 111 165 153
Nan Nan Nan Nan Nan Nan
Nan Nan Nan Nan Nan Nan
141 121 Nan Nan Nan Nan
请注意,最上面一行只是标题,而第二行是我的数据开始。如果有人能帮助我朝正确的方向解决这个难题,将不胜感激。
另外我的第二个问题是,如果我想删除缺少4或5列数据的行,那么在删除所有列中的所有Nan之后,那将是最佳解决方案。
最后一个问题是,在删除大多数Nan的行之后是否可能,那么如何在其余的450行上创建箱形图?
任何回复都将受到高度赞赏。
此致
答案 0 :(得分:4)
我需要检查在任何特定行中是否所有值都是NaN,以便我可以从我的数据集中删除它们。
这正是pd.DataFrame.dropna(how='all')
的作用:
In [3]: df = pd.DataFrame({'a': [None, 1, None], 'b': [None, 1, 2]})
In [4]: df
Out[4]:
a b
0 NaN NaN
1 1.0 1.0
2 NaN 2.0
In [5]: df.dropna(how='all')
Out[5]:
a b
1 1.0 1.0
2 NaN 2.0
关于你的第二个问题,pd.DataFrame.boxplot
会这样做。您可以使用column
参数指定所需的列(如果需要)。另见the example in the docs。
答案 1 :(得分:4)
对于那些搜索,因为希望知道问题标题:
检查行中的所有列值是否为NaN
一个简单的方法是:
df[[list_of_cols_to_check]].isnull().apply(lambda x: all(x), axis=1)
import pandas as pd
import numpy as np
df = pd.DataFrame({'movie': [np.nan, 'thg', 'mol', 'mol', 'lob', 'lob'],
'rating': [np.nan, 4., 5., np.nan, np.nan, np.nan],
'name': ['John', np.nan, 'N/A', 'Graham', np.nan, np.nan]})
df.head()
检查所有列是否为NaN:
cols_to_check = df.columns
df['is_na'] = df[cols_to_check].isnull().apply(lambda x: all(x), axis=1)
df.head()
要检查列的名称,“评级”是否为NaN:
cols_to_check = ['name', 'rating']
df['is_na'] = df[cols_to_check].isnull().apply(lambda x: all(x), axis=1)
df.head()