2014-04-17 52 views
1

我想在Pandas中的DataFrame的開始處將最後的NaN置零。我的數據框對象有時間戳在如何使用時間戳索引找到DataFrame中的前一行?

實例數據

如果我有這樣的數據:

In [228]: my_df 
Out[228]: 
      blah 
1990-01-01 NaN 
1990-01-02 NaN 
1990-01-03 NaN 
1990-01-04 NaN 
1990-01-05 NaN 
1990-01-06  5 
1990-01-07  6 
1990-01-08  7 
1990-01-09 NaN 
1990-01-10  9 

[10 rows x 1 columns] 

我想(改變上月5日的值)以下內容:

  blah 
1990-01-01 NaN 
1990-01-02 NaN 
1990-01-03 NaN 
1990-01-04 NaN 
1990-01-05  0 
1990-01-06  5 
1990-01-07  6 
1990-01-08  7 
1990-01-09 NaN 
1990-01-10  9 

[10 rows x 1 columns] 

我已經試過

我在上次的NaN後得到的指數:

In [229]: ts = my_df['blah'].first_valid_index() 

In [230]: ts 
Out[230]: Timestamp('1990-01-06 00:00:00', tz=None) 

我發現這種醜陋的做法:

my_df['blah'][:ts][-2] = 0 

但是,這將引發IndexError如果我的數據幀沒有任何的NaN在開始時。什麼更好的解決方案看起來像(大概不用寫一個for循環)?

回答

1

也許只是處理IndexErrortry..except

try: 
    df.loc[:ts, 'blah'][-2] = 0 
except IndexError: 
    pass 

if-statement

s = df.loc[:ts, 'blah'] 
if len(s) > 1: 
    s[-2] = 0 

由於:ts是基本剖面,s是一個視圖。因此修改s會修改df

相關問題