当我有一个类似于以下内容的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
答案 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)