Pandas graphlab查找至少有一个None值的所有列

Pandas graphlab查找至少有一个None值的所有列,pandas,scipy,graphlab,Pandas,Scipy,Graphlab,如何找到SFrame中至少有一个None值的所有列?一种方法是遍历每一列并检查该列中的值是否为None。有没有更好的方法来完成这项工作?这里有一个解决方案: In [50]: df Out[50]: keys values 0 1 1.0 1 2 2.0 2 2 3.0 3 3 4.0 4 3 5.0 5 3 NaN 6 3 7.0 In [51]: df.columns.t

如何找到SFrame中至少有一个None值的所有列?一种方法是遍历每一列并检查该列中的值是否为None。有没有更好的方法来完成这项工作?

这里有一个解决方案:

In [50]: df
Out[50]:
   keys  values
0     1     1.0
1     2     2.0
2     2     3.0
3     3     4.0
4     3     5.0
5     3     NaN
6     3     7.0

In [51]: df.columns.to_series()[df.isnull().any()]
Out[51]:
values    values
dtype: object

In [52]: df.columns.to_series()[df.isnull().any()].tolist()
Out[52]: ['values']
说明:

In [53]: df.isnull().any()
Out[53]:
keys      False
values     True
dtype: bool
您可以使用:

示例:

df = pd.DataFrame({'col1':['A', 'A', 'B','B'], 'col2': ['B','B','C','C'], 'col3': ['C','C','A','A'], 'col4': [11,12,13,np.nan], 'col5': [30,10,14,91]})
df
    col1 col2 col3  col4 col5
0   A   B   C   11.0    30
1   A   B   C   12.0    10
2   B   C   A   13.0    14
3   B   C   A   NaN     91

pd.isnull(df).sum() > 0

col1    False
col2    False
col3    False
col4     True
col5    False
dtype: bool

要在
SFrame
中查找
None
值,请使用
SArray
方法
num_missing
()

解决方案 例子 警告
  • 它不是最优的,因为它不会在第一次迭代时停止
    None
    价值观
  • 它不会检测到
    NaN
    和空字符串
df = pd.DataFrame({'col1':['A', 'A', 'B','B'], 'col2': ['B','B','C','C'], 'col3': ['C','C','A','A'], 'col4': [11,12,13,np.nan], 'col5': [30,10,14,91]})
df
    col1 col2 col3  col4 col5
0   A   B   C   11.0    30
1   A   B   C   12.0    10
2   B   C   A   13.0    14
3   B   C   A   NaN     91

pd.isnull(df).sum() > 0

col1    False
col2    False
col3    False
col4     True
col5    False
dtype: bool
>>> col_w_none = [col for col in sf.column_names() if sf[col].num_missing()>0]
>>> sf = gl.SFrame({'foo':[1,2,3,4], 'bar':[1,None,3,4]})
>>> print sf
+------+-----+
| bar  | foo |
+------+-----+
|  1   |  1  |
| None |  2  |
|  3   |  3  |
|  4   |  4  |
+------+-----+
[4 rows x 2 columns]
>>> print [col for col in sf.column_names() if sf[col].num_missing()>0]
['bar']
>>> sf = gl.SFrame({'foo':[1,2,3,4], 'bar':[1,None,3,4], 'baz':[1,2,float('nan'),4], 'qux':['spam', '', 'ham', 'eggs']} )
>>> print sf
+------+-----+-----+------+
| bar  | baz | foo | qux  |
+------+-----+-----+------+
|  1   | 1.0 |  1  | spam |
| None | 2.0 |  2  |      |
|  3   | nan |  3  | ham  |
|  4   | 4.0 |  4  | eggs |
+------+-----+-----+------+
[4 rows x 4 columns]
>>> print [col for col in sf.column_names() if sf[col].num_missing()>0]
['bar']