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]]) 
+0

它是'“None”(一个字符串)还是'None'? – DyZ

+0

现在你问,我不确定。我认为它是'None',不是字符串 – jlt199

+1

'None'会被'np.nan'自动替换。这可能是你没有的“无”。请检查。答案取决于你有什么。 – DyZ

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 
+0

我得到的错误'错误的维数' – jlt199

+1

略微放在一边; “〜'+'eq'有没有原因,而不是'ne'?我无法测试atm,但从快速搜索看来,'ne'会做到这一点?我在大熊猫的学习阶段。 – roganjosh

+1

@roganjosh,好点!谢谢! – MaxU

设置
借@ 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 
+0

我得到的错误类型错误:无法与字符串解决方案和与之前使用第一个解决方案相同大小的数据框与块值进行比较['无'] – jlt199

+0

@ jlt199我更新了我的帖子... – piRSquared

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

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

工作。我不确定你的建议为什么不适合我。