2016-12-05 61 views
-1

我有一个所有布尔值(1或0)列的数据框,但有一些列中包含无效值,例如: 111,10,11。我需要通过删除其中包含无效值的数据行来清理数据。但清理出非布尔值之前,所述第一列是年龄,我需要通过将它们放置在一个范围的18-150清理的行,因为有诸如700或600在Python中清除数据框中的非布尔值

cleandata4bestdeal2=cleandata4bestdeal.dropna(axis=0,how=any,inplace = False) 

我已经删除了值为NaN的行,但我正在使用上述尝试并删除所有非布尔值。
CleanDataFrame

+0

你能不能给我们一些样本数据? – blacksite

+0

另外,当那些布尔值显然不是'nan'时,为什么要使用'pandas.DataFrame.dropna()'? – blacksite

+0

我添加了上面的数据的屏幕截图。我已经使用了dropna(),它摆脱了NaN值,但它没有摆脱非布尔值。 –

回答

0
# create some sample data, since none was provided 
>>> df = pd.DataFrame({'Age': [15, 700, 600, 150, 125, 32, 45, 43, 56, 1002], 'Boolean': ['001', '100', '0', '1', '1', '010', '110', '1', '0', '0']}) 
>>> print(df) 
    Age Boolean 
0 15  001 
1 700  100 
2 600  0 
3 150  1 
4 125  1 
5 32  010 
6 45  110 
7 43  1 
8 56  0 
9 1002  0 

# keep only those rows for which the 'Age' column is in the inclusive range [18, 150] 
>>> new_df = df[df['Age'].isin(range(18, 151))] 
>>> print(new_df) 
    Age Boolean 
3 150  1 
4 125  1 
5 32  010 
6 45  110 
7 43  1 
8 56  0 

# finally, keep only those boolean values that are of length 1 
# (i.e. exclude rows with 'Boolean' values like '110' or '010') 
>>> new_df = new_df[new_df['Boolean'].map(len) == 1] 
>>> print(new_df) 
    Age Boolean 
3 150  1 
4 125  1 
7 43  1 
8 56  0 
+0

我也试过len的东西。我会怎么做多列?非常感谢你为这件作品!我会在['布尔','新列']中添加一个逗号吗? –

+0

好吧,这是行不通的,我必须把这个要求放在每一列吗?创建像10个新的数据框? –

+0

我需要从多列中删除非布尔值。就像你在上面的例子中所说的那样,但是说有另一个名为Boolean2的列,其中包含1和0的数据以及需要清理的数据。如果可能,我想在一行代码中这样做。到目前为止,我对如何做到这一点感到困惑。 –