簡體   English   中英

刪除多指標為nan(Pandas)的行

[英]Delete rows where a level of multindex is nan (Pandas)

我有一個帶有multindex的下表

                       value
userid     date

NaN        2014-06-12   42799
           2014-06-13   47673
           2014-06-14   47042
           2014-06-15   48079
           2014-06-16   44873
           2014-06-17   46586
           2014-06-18   44575
1000000021 2014-06-17   0
1000000024 2014-06-22   20
1000000043 2014-06-12   14
           2014-06-14   22
          .
          .
          .
          .

我想刪除用戶標識為Nan的行。 如果我想再放一行,我可以做

data = data.drop(1000000021)

data = data.drop('NaN')
data = data.drop(np.nan)

其他嘗試都會返回不同品種的錯誤。 有沒有一種方法可以刪除行而無需重新索引?

您可以使用df.index.labels[0] == -1標識索引為NaN的行,並使用df.loc選擇其他行:

In [48]: df.loc[~(df.index.labels[0] == -1)]
Out[48]: 
                       value
userid     date             
1000000021 2014-06-17      0
1000000024 2014-06-22     20
1000000043 2014-06-12     14
           2014-06-14     22

使用布爾索引時, df[...]df.loc[...]df.iloc[...]行為均相同。 df[...]通常用於選擇列,因此,如上所述,您可能要避免使用df[...]來選擇行。 這使df.locdf.iloc成為可行的選擇。 由於df.iloc主要是為了按整數索引選擇而創建的,因此您可能想使用df.loc[...]來按標簽布爾掩碼進行選擇。 但這只是我的約定-熊貓允許所有這三個。

更容易重置並從框架中掉落,然后設置索引。

In [3]: df =  DataFrame(np.random.randint(0,10,size=16).reshape(-1,1),columns=['value'],index=pd.MultiIndex.from_product([[np.nan,1,2,3],pd.date_range('20130101',periods=4)],names=['first','second']))

In [4]: df
Out[4]: 
                  value
first second           
NaN   2013-01-01      0
      2013-01-02      2
      2013-01-03      9
      2013-01-04      3
1     2013-01-01      8
      2013-01-02      8
      2013-01-03      5
      2013-01-04      3
2     2013-01-01      4
      2013-01-02      1
      2013-01-03      2
      2013-01-04      7
3     2013-01-01      3
      2013-01-02      9
      2013-01-03      3
      2013-01-04      4

In [5]: df.reset_index().dropna(subset=['first']).set_index(['first','second'])
Out[5]: 
                  value
first second           
1     2013-01-01      8
      2013-01-02      8
      2013-01-03      5
      2013-01-04      3
2     2013-01-01      4
      2013-01-02      1
      2013-01-03      2
      2013-01-04      7
3     2013-01-01      3
      2013-01-02      9
      2013-01-03      3
      2013-01-04      4

暫無
暫無

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

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