2016-09-18 77 views
0

我想將日期觀察值從一列轉換爲我的數據框的索引。我可以用下面的代碼來做到這一點:在自定義函數中使用set_index

的樣本數據:

test = pd.DataFrame({'Values':[1,2,3], 'Date':["1/1/2016 17:49","1/2/2016 7:10","1/3/2016 15:19"]}) 

索引代碼:

test['Date Index'] = pd.to_datetime(test['Date']) 
test = test.set_index('Date Index') 
test['Index'] = test.index.date 

但是當我嘗試包括在一個函數的代碼,我可以創建'日期索引'列,但​​似乎沒有按預期工作。

def date_index(df): 
    df['Date Index'] = pd.to_datetime(df['Date']) 
    df = df.set_index('Date Index') 
    df['Index'] = df.index.date 

如果我檢查不使用功能info()返回的輸出:

<class 'pandas.core.frame.DataFrame'> 
DatetimeIndex: 3 entries, 2016-01-01 17:49:00 to 2016-01-03 15:19:00 
Data columns (total 3 columns): 
Date  3 non-null object 
Values 3 non-null int64 
Index  3 non-null object 
dtypes: int64(1), object(2) 
memory usage: 96.0+ bytes 

如果我檢查功能info()返回的輸出:

<class 'pandas.core.frame.DataFrame'> 
RangeIndex: 3 entries, 0 to 2 
Data columns (total 2 columns): 
Date  3 non-null object 
Values 3 non-null int64 
dtypes: int64(1), object(1) 
memory usage: 120.0+ bytes 

我想DatetimeIndex

​​如何在一個函數內使用?我使用不正確?

回答

0

return df IIUC丟失:

df1 = pd.DataFrame({'Values':[1,2,3], 'Exam Completed Date':["1/1/2016 17:49","1/2/2016 7:10","1/3/2016 15:19"]}) 

def date_index(df): 
    df['Exam Completed Date Index'] = pd.to_datetime(df['Exam Completed Date']) 
    df = df.set_index('Exam Completed Date Index') 
    df['Index'] = df.index.date 
    return df 

print (date_index(df1)) 
          Exam Completed Date Values  Index 
Exam Completed Date Index           
2016-01-01 17:49:00   1/1/2016 17:49  1 2016-01-01 
2016-01-02 07:10:00    1/2/2016 7:10  2 2016-01-02 
2016-01-03 15:19:00   1/3/2016 15:19  3 2016-01-03 

print (date_index(df1).info()) 
<class 'pandas.core.frame.DataFrame'> 
DatetimeIndex: 3 entries, 2016-01-01 17:49:00 to 2016-01-03 15:19:00 
Data columns (total 3 columns): 
Exam Completed Date 3 non-null object 
Values     3 non-null int64 
Index     3 non-null object 
dtypes: int64(1), object(2) 
memory usage: 96.0+ bytes 
None 
+0

test.info()的'的輸出'使用函數時是不同的。我想要一個DatetimeIndex。請參閱編輯以提問。 –

+0

有趣的是,對我來說它很好。請檢查編輯。 – jezrael

+0

你輸出的區別在於你使用了'date_index(df1).info()',我正在使用'df1.info()'。我認爲這種區別很重要,因爲如果您使用自定義的'date_index()'函數,我最終在dataframe上使用'df1.index.values',從而得到不同的結果。 –