Python Pandas: 检查行值中的所有列是否为 NaN
Python Pandas: Check if all columns in rows value is NaN
如果我的问题已经得到解答,请接受我的道歉。我试图找到一个解决方案,但我能找到的只是为数据框中的所有 NaN 删除解决方案。
我的问题是我有一个包含 6 列和 500 行的数据框。我需要检查任何特定行中的所有值是否都是 NaN,以便我可以将它们从我的数据集中删除。下面的示例第 2、6 和 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
请注意,顶行只是标题,从第 2 行开始我的数据。如果有人能在正确的方向上帮助我解决这个难题,我将不胜感激。
还有我的第二个问题是,在删除所有列中的所有 Nan 之后,如果我想删除缺少 4 或 5 列数据的行,那么最好的解决方案是什么。
最后一个问题是,在删除包含最多 Nan 的行之后是否有可能如何在剩余的行(例如 450 行)上创建箱形图?
任何回复将不胜感激。
此致,
I need to check if in any particular row all the values are NaN so that I can drop them from my dataset.
这正是 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
will do that. You can specify the columns you want (if needed), with the column
parameter. See the example in the docs也是。
对于那些搜索因为想知道问题标题:
Check if all columns in rows value is 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()
检查列 'name'、'rating' 是否为 NaN:
cols_to_check = ['name', 'rating']
df['is_na'] = df[cols_to_check].isnull().apply(lambda x: all(x), axis=1)
df.head()
如果我的问题已经得到解答,请接受我的道歉。我试图找到一个解决方案,但我能找到的只是为数据框中的所有 NaN 删除解决方案。 我的问题是我有一个包含 6 列和 500 行的数据框。我需要检查任何特定行中的所有值是否都是 NaN,以便我可以将它们从我的数据集中删除。下面的示例第 2、6 和 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
请注意,顶行只是标题,从第 2 行开始我的数据。如果有人能在正确的方向上帮助我解决这个难题,我将不胜感激。
还有我的第二个问题是,在删除所有列中的所有 Nan 之后,如果我想删除缺少 4 或 5 列数据的行,那么最好的解决方案是什么。
最后一个问题是,在删除包含最多 Nan 的行之后是否有可能如何在剩余的行(例如 450 行)上创建箱形图?
任何回复将不胜感激。
此致,
I need to check if in any particular row all the values are NaN so that I can drop them from my dataset.
这正是 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
will do that. You can specify the columns you want (if needed), with the column
parameter. See the example in the docs也是。
对于那些搜索因为想知道问题标题:
Check if all columns in rows value is 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()
检查列 'name'、'rating' 是否为 NaN:
cols_to_check = ['name', 'rating']
df['is_na'] = df[cols_to_check].isnull().apply(lambda x: all(x), axis=1)
df.head()