2016-12-05 63 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的數據以及需要清理的數據。如果可能,我想在一行代碼中這樣做。到目前爲止,我對如何做到這一點感到困惑。 –