2015-10-05 120 views
6

我期望使用pandas根據列名稱(包含空格)和單元格值刪除行。我嘗試過各種方法來實現這一點(拖放和查詢方法),但由於名稱空間的原因,我似乎失敗了。有沒有辦法使用名稱中有空格的數據來查詢數據,還是需要首先清理所有空間?在csv文件的形式使用包含空格的列名稱查詢Pandas DataFrame或使用列名稱包含空格的拖放方法

數據

Date,"price","Sale Item" 
2012-06-11,1600.20,item1 
2012-06-12,1610.02,item2 
2012-06-13,1618.07,item3 
2012-06-14,1624.40,item4 
2012-06-15,1626.15,item5 
2012-06-16,1626.15,item6 
2012-06-17,1626.15,item7 

嘗試實施例在多數情況下接收

df.drop(['Sale Item'] != 'Item1') 
df.drop('Sale Item' != 'Item1') 
df.drop("'Sale Item'] != 'Item1'") 

df.query('Sale Item' != 'Item1') 
df.query(['Sale Item'] != 'Item1') 
df.query("'Sale Item'] != 'Item1'") 

錯誤

ImportError: 'numexpr' not found. Cannot use engine='numexpr' for query/eval if 'numexpr' is not installed 

回答

5

如果我理解正確的話您的問題,也許你可以只申請一個過濾器,如:

df = df[df['Sale Item'] != 'item1'] 

返回:

  Date price Sale Item 
1 2012-06-12 1610.02  item2 
2 2012-06-13 1618.07  item3 
3 2012-06-14 1624.40  item4 
4 2012-06-15 1626.15  item5 
5 2012-06-16 1626.15  item6 
6 2012-06-17 1626.15  item7 
+0

,將工作,如果我不使用下拉方法會很樂意接受這樣的解決辦法得到答案。謝謝Fabio – iNoob

+0

@iNoob爲什麼你需要一個使用'drop'的方法? –

+0

因爲id更喜歡它,如果它存在 – iNoob

4

正如你可以看到從the documentation -

數據幀。 (標籤,axis = 0,level = None,inplace = False,errors ='raise')

在請求的軸標籤

返回新的對象除去

DataFrame.drop()取行的index下降,滿足條件。因此,你將最有可能需要這樣的東西 -

df.drop(df.ix[df['Sale Item'] != 'item1'].index) 

請注意,這種下降符合條件的行,那麼結果將是不符合條件的行,如果你想相反,你可以在您的條件之前使用~運算符來否定它。

但是,這似乎有點太多了,只是使用布爾索引來獲取所需的行(如其他答案中所示)會更容易。


演示 -

In [20]: df 
Out[20]: 
     Date price Sale Item 
0 2012-06-11 1600.20  item1 
1 2012-06-12 1610.02  item2 
2 2012-06-13 1618.07  item3 
3 2012-06-14 1624.40  item4 
4 2012-06-15 1626.15  item5 
5 2012-06-16 1626.15  item6 
6 2012-06-17 1626.15  item7 

In [21]: df.drop(df.ix[df['Sale Item'] != 'item1'].index) 
Out[21]: 
     Date price Sale Item 
0 2012-06-11 1600.2  item1 
+0

感謝您的答案Anand。你能解釋爲什麼法比奧的答案比丟棄方法更好嗎?據我瞭解,這種下降方法是爲了這個確切的目的而開發的?不要誤會我,法比奧比我更有經驗。我只是試圖向你學習,並理解你爲什麼認爲這是一個更好的選擇。 – iNoob

+0

對我來說,另一種方法看起來更短。我看到'drop'方法的唯一優點是它有一個inplace參數,可以用來更改就地的數據幀。 –

+0

好吧,我現在已經有時間使用它們,並且實際上發現法比奧的答案更加實用。我現在堅持接受答案的困境。你們直接回答我的問題,但法比奧的我發現更多可用。 – iNoob

相關問題