Python Pandas Dataframe,删除'None'为任何列中的值的所有行
我有一个很大的数据框。创建时'无'用作无法计算数字的值(而不是'南')Python Pandas Dataframe,删除'None'为任何列中的值的所有行
如何删除所有列中的“无”的所有行?我虽然可以使用df.dropna
并设置值为na
,但我似乎无法做到。
感谢
我觉得这是数据帧的良好表示:
temp = pd.DataFrame(data=[['str1','str2',2,3,5,6,76,8],['str3','str4',2,3,'None',6,76,8]])
UPDATE:
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
设置
借@ 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)
然后用mask
df.mask(df.eq('None')).dropna()
0 1 2
0 1 2 3
3 9 10 11
结合dropna
可以确保整个数据帧是object
当你与比较。
df.mask(df.astype(object).eq('None')).dropna()
0 1 2
0 1 2 3
3 9 10 11
我得到的错误类型错误:无法与字符串解决方案和与之前使用第一个解决方案相同大小的数据框与块值进行比较['无'] – jlt199
@ jlt199我更新了我的帖子... – piRSquared
感谢您的帮助。最后,我能得到
df = df.replace(to_replace='None', value=np.nan).dropna()
工作。我不确定你的建议为什么不适合我。
它是'“None”(一个字符串)还是'None'? – DyZ
现在你问,我不确定。我认为它是'None',不是字符串 – jlt199
'None'会被'np.nan'自动替换。这可能是你没有的“无”。请检查。答案取决于你有什么。 – DyZ