簡體   English   中英

在不在中間的大熊貓中放入南行

[英]Drop nan rows in pandas that are not in the middle

我有一個按時間索引的熊貓數據框,

例如:

Time                       Value
2010-01-01                 nan
2010-01-02                 nan
2010-01-03                 3
2010-01-04                 4
2010-01-05                 5
2010-01-06                 3
2010-01-07                 nan
2010-01-08                 nan
2010-01-09                 3
2010-01-10                 3
2010-01-11                 4
2010-01-12                 5
2010-01-13                 3
2010-01-14                 nan
2010-01-15                 nan

在此示例中,我想刪除前兩行和后兩行。 但是中間沒有nan的行。 有沒有辦法做到這一點?

您可以使用第一個有效值和最后一個有效值的索引來過濾數據框:

df.loc[df.Value.first_valid_index(): df.Value.last_valid_index()]

結果:

            Value
Time             
2010-01-03    3.0
2010-01-04    4.0
2010-01-05    5.0
2010-01-06    3.0
2010-01-07    NaN
2010-01-08    NaN
2010-01-09    3.0
2010-01-10    3.0
2010-01-11    4.0
2010-01-12    5.0
2010-01-13    3.0

假設data是您的數據框:

a, b = data.dropna().index[[0, -1]]

您也可以考慮選擇特定的列,例如使用data['Value']而不是data

這樣,您將獲得不包含NaN的開始索引和結束索引。 然后,您只需要獲取該切片(請謹慎添加最后一行):

data[a:b+1]

結果:

Time                       Value
2010-01-03                 3
2010-01-04                 4
2010-01-05                 5
2010-01-06                 3
2010-01-07                 nan
2010-01-08                 nan
2010-01-09                 3
2010-01-10                 3
2010-01-11                 4
2010-01-12                 5
2010-01-13                 3

遵循@unutbu技巧使用loc單行解決方案:

data.loc[slice(*data.dropna().index[[0, -1]])]

使用bfillffill

df[df.Value.ffill().notnull()&df.Value.bfill().notnull()]
Out[464]: 
          Time  Value
2   2010-01-03    3.0
3   2010-01-04    4.0
4   2010-01-05    5.0
5   2010-01-06    3.0
6   2010-01-07    NaN
7   2010-01-08    NaN
8   2010-01-09    3.0
9   2010-01-10    3.0
10  2010-01-11    4.0
11  2010-01-12    5.0
12  2010-01-13    3.0

暫無
暫無

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

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