簡體   English   中英

使用包含空格的列名稱或使用包含空格的列名稱的drop方法查詢Pandas DataFrame

[英]Querying Pandas DataFrame with column name that contains a space or using the drop method with a column name that contains a space

我希望使用pandas根據列名(包含空格)和單元格值刪除行。 我已經嘗試了各種方法來實現這一點(drop和query方法),但由於名稱中的空格,我似乎失敗了。 有沒有辦法使用其中有空格的名稱查詢數據,或者我是否需要先清理所有空格?

數據以csv文件的形式

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

如果我正確理解了您的問題,也許您只需應用以下過濾器:

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

文檔中可以看出 -

DataFrame.drop(labels,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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM