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

时间:2016-09-03 07:26:06

标签: pandas scipy graphlab

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

3 个答案:

答案 0 :(得分:4)

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

解决方案

>>> 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']

注意事项

  • 这不是最佳的,因为它不会停在第一个None处迭代 值。
  • 它不会检测到NaN和空字符串。
>>> 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']

答案 1 :(得分:0)

这是一个熊猫解决方案:

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

答案 2 :(得分:0)

您可以使用isnull

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

示例:

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