Python pandas读取excel - 从两列创建索引

时间:2015-12-15 20:23:23

标签: python datetime pandas

当我有一个类似于以下内容的excel文件时,我经常遇到问题:

 Date     ,      Hour

 2015-12-15 ,      1    

(请注意,这些数据是从excel中读取的,所以日期格式为excel格式)

现在我试过了:

df2=pd.read_excel(name, sheetname=0,skiprows=17, parse_dates="Date")
df2["test"]=df2.apply(lambda val: val["Date"]+timedelta(hours=int(df2["Hour"])-1))

但是,我收到错误:

KeyError: 'Date', ' occured at index Date'

我的df2有以下类型:

Date:  datetime64
Hour:  object

另外我试过:

df2.set_index(df2["Date"]+df2["Hour"])

但没有成功。

是否有人知道如何避免此错误,或者如何以下列格式获取索引列:

2015-12-15 00:00:00

2 个答案:

答案 0 :(得分:2)

如果代替您的代码,那么您的代码将会有效。

df2["test"]=df2.apply(lambda val: val["Date"]+timedelta(hours=int(df2["Hour"])-1))

你应该用过;

df2["test"]=df2.apply(lambda val: val["Date"]+timedelta(hours=int(df2["Hour"])-1), axis=1)

这将确保.apply适用于整个pandas数据帧而不是系列。

答案 1 :(得分:1)

对于这个xlsx文件:

Date        Hour
12/12/2015  1
12/13/2015  2
12/14/2015  3
12/15/2015  4
12/16/2015  5
12/17/2015  6

这对我有用:

from datetime import datetime
import pandas as pd

df2 = pd.read_excel('dates.xlsx')

index_candidate = [(str(x).split()[0]+' '+str(y)) for x,y in zip(df2['Date'],df2['Hour'])]
index_candidate = [datetime.strptime(a, '%Y-%m-%d %H') for a in index_candidate]

df2.set_index(pd.DatetimeIndex(index_candidate),inplace=True)