2016-06-08 130 views
1

我按月試圖組pd.DataFrame和應用自定義功能ultimo(x)df.first_valid_index()返回引發KeyError的索引?

def ultimo(x): 
    if x.first_valid_index() is None: 
     return np.nan 
    else: 
     return x[x.first_valid_index()] 

我從另一個question of mine得到這個。但是,今天我在應用它時遇到了KeyError - 它聲稱返回的索引不在索引內?

Sample DataFrame as input

我已經印刷了什麼x和x.first_valid_index()返回以及:

x.index: <class 'pandas.tseries.index.DatetimeIndex'> 
x.index.values: ['2015-03-30T02:00:00.000000000+0200' '2015-03-31T02:00:00.000000000+0200'] <class 'numpy.ndarray'> of type <class 'numpy.datetime64'> 
x.first_valid_index(): 2015-03-30 00:00:00 <class 'pandas.tslib.Timestamp'> 

我已經轉換使用pd.to_datetime我的約會指數爲datetime運行navs = navs.groupby(navs.index.to_period('M')).apply(ultimo)之前:

navs['Date'] = pd.to_datetime(navs['Date']) 
navs = navs.set_index('Date') 

我該如何解決這個問題?似乎很諷刺的是,pd.first_valid_index()返回了一個提高了KeyError的索引。我的猜測是,我必須先對我的索引進行一些其他轉換?

回答

2

這是因爲在您之前的問題中,輸入(因此x)是一個系列,因此x[index]按預期工作。對於數據幀,x[index]需要列名稱。爲了訪問由索引索引的行,您需要x.loc[index]。見documentation here

此功能將工作:

def ultimo(x): 
    if x.first_valid_index() is None: 
     return np.nan 
    else: 
     return x.loc[x.first_valid_index()]