[英]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.loc
和df.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.