我有一个大型数据框。当它被创建时,'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]])
答案 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)
然后将dropna
与mask
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