Python Pandas Dataframe,删除所有行,其中'None'是任何列中的值

时间:2017-08-04 17:48:10

标签: python pandas dataframe

我有一个大型数据框。当它被创建时,'None'被用作无法计算数字的值(而不是'nan')

如何删除任何列中包含“无”的所有行?我虽然可以使用df.dropna并设置na的值,但我似乎无法做到。

由于

我认为这是数据框的一个很好的代表:

temp = pd.DataFrame(data=[['str1','str2',2,3,5,6,76,8],['str3','str4',2,3,'None',6,76,8]])

3 个答案:

答案 0 :(得分:9)

<强>设置
借了@ MaxU的df

df = pd.DataFrame([
    [1, 2, 3],
    [4, None, 6],
    [None, 7, 8],
    [9, 10, 11]
], dtype=object)

<强>解决方案
您可以按原样使用pd.DataFrame.dropna

df.dropna()

   0   1   2
0  1   2   3
3  9  10  11

假设您拥有None

中的df个字符串
df = pd.DataFrame([
    [1, 2, 3],
    [4, 'None', 6],
    ['None', 7, 8],
    [9, 10, 11]
], dtype=object)

然后将dropnamask

合并
df.mask(df.eq('None')).dropna()

   0   1   2
0  1   2   3
3  9  10  11

与。

比较时,您可以确保整个数据框为object
df.mask(df.astype(object).eq('None')).dropna()

   0   1   2
0  1   2   3
3  9  10  11

答案 1 :(得分:8)

感谢您的帮助。最后我得到了

df = df.replace(to_replace='None', value=np.nan).dropna()

上班。我不确定为什么你的建议不适合我。

答案 2 :(得分:5)

<强>更新

In [70]: temp[temp.astype(str).ne('None').all(1)]
Out[70]:
      0     1  2  3  4  5   6  7
0  str1  str2  2  3  5  6  76  8

旧回答:

In [35]: x
Out[35]:
      a     b   c
0     1     2   3
1     4  None   6
2  None     7   8
3     9    10  11

In [36]: x = x[~x.astype(str).eq('None').any(1)]

In [37]: x
Out[37]:
   a   b   c
0  1   2   3
3  9  10  11

bit nicer variant from @roganjosh

In [47]: x = x[x.astype(str).ne('None').all(1)]

In [48]: x
Out[48]:
   a   b   c
0  1   2   3
3  9  10  11