2016-09-18 79 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',从而得到不同的结果。 –