2017-05-26 34 views
1

我是編程和Python3 /大熊貓的新手。我想刪除所有列,結果「未知」的某一列

我已經寫了一個csv文件到dF,並且使用了熊貓和numpty。 dF包含一系列的列,A,B,C等,以及數千行數據(並非全部都是數字)。我想從數據框中刪除所有「未知」的實例。

我曾嘗試:

DF = DF [DF [ 'A'= '未知']!]

,但它給了我一個錯誤信息。

+0

你能具體談談你的問題的錯誤? –

回答

1

您的意思是?

df = df[df['A'] != 'unknown'] 

或者你可以使用query()

df = df.query('A != "unknown"') 
+0

謝謝,這似乎工作。如果我需要根據日期範圍過濾行(我有1列包含日期時間格式的日期,我該如何做? – Tom

+1

您可以使用'&'連接條件:'df = df.query('A!= 「未知」&B>「2017-09-21」')' – HYRY

+0

謝謝。它似乎工作,但我得到警告「一個值試圖設置在一個DataFrame的切片副本上 嘗試使用.loc [row_indexer,col_indexer] = value改爲「 – Tom

2

您可以通過boolean indexing需要過濾數據:

df = pd.DataFrame({'A':['a','unknown','b'], 
        'B':pd.date_range('2017-01-01', periods=3), 
        'C':[7,8,9], 
        'D':[1,3,5]}) 
print (df) 
     A   B C D 
0  a 2017-01-01 7 1 
1 unknown 2017-01-02 8 3 
2  b 2017-01-03 9 5 

您需要括在大括號由於運算符優先級的多個條件,並使用按位和(&)和或(|)運營商如果有多個條件:

df1 = df[(df['A'] != 'unknown') & (df['B'] > '2017-01-02')] 
print (df1) 
    A   B C D 
2 b 2017-01-03 9 5 

但是,如果以後需要處理數據:

df1['C'] = df1['C'] + 1 
print (df1) 

值正試圖以從數據幀切片的副本設定。 嘗試使用的.loc [row_indexer,col_indexer] =值,而不是

問題是,如果你修改df1值以後你會發現,修改不會傳播回原始數據(df)和熊貓做警示。

解決辦法是copy

df1 = df[(df['A'] != 'unknown') & (df['B'] > '2017-01-02')].copy() 
print (df1) 
    A   B C D 
2 b 2017-01-03 9 5 

df1['C'] = df1['C'] + 1 
print (df1) 
    A   B C D 
2 b 2017-01-03 10 5