Python 从Excel创建数组并添加缺少的数据
我正在读取一个excel文件,其中包含日期、小时和值列。日期范围为2014年7月15日至2016年7月15日。我的excel文件中没有这些天的一些小时。例如,数据从2014年7月15日13:00开始,但前13个小时不见了。类似地,例如,在某些天,excel中记录了23个小时,但缺少另一个小时 我想做的是,我将创建一个Python 从Excel创建数组并添加缺少的数据,python,pandas,numpy,nan,missing-data,Python,Pandas,Numpy,Nan,Missing Data,我正在读取一个excel文件,其中包含日期、小时和值列。日期范围为2014年7月15日至2016年7月15日。我的excel文件中没有这些天的一些小时。例如,数据从2014年7月15日13:00开始,但前13个小时不见了。类似地,例如,在某些天,excel中记录了23个小时,但缺少另一个小时 我想做的是,我将创建一个numpy数组,其形状为[#of days,24,3],如果xlsx文件中不存在相应的日期和小时,则该数组将具有NaN 以下是我所做的: def read_XT(path):
numpy数组
,其形状为[#of days,24,3]
,如果xlsx
文件中不存在相应的日期和小时,则该数组将具有NaN
以下是我所做的:
def read_XT(path):
# first row is header
df = pd.read_excel(in_path +'.xlsx',skiprows=1)
origin= datetime.strptime(df[u'DATE'][0]+' '+'00:00:00', '%d-%m-%Y %H:%M:%S')
final = datetime.strptime(df[u'DATE'].iloc[-1]+' '+'00:00:00', '%d-%m-%Y %H:%M:%S')
# find number of days
ndays = (final-origin).days+1
# initialize array with size and NaN values
XT = np.ndarray(shape = (ndays,24,3), dtype="S10")
XT[:, :, :] = np.nan
for idx in range(df.shape[0]):
day,hour = df[u'DATE'][idx],df[u'HOUR'][idx]
# strip time
dt = datetime.strptime(day+' '+hour, '%d-%m-%Y %H:%M:%S')
# find difference from the first timestamp
dftime = dt-origin
hour_idx = int(dftime.total_seconds()/(60*60))%24
day_idx = dftime.days
# put corresponding value to day and index
XT[day_idx,hour_idx,:] = [day, hour, df[u'VALUE'].iloc[idx]]
return XT
我的数组的第一个元素(应该包括第一天小时的第一个值)如下所示:
[['nan' 'nan' 'nan']
['nan' 'nan' 'nan']
['nan' 'nan' 'nan']
['nan' 'nan' 'nan']
['nan' 'nan' 'nan']
['nan' 'nan' 'nan']
['nan' 'nan' 'nan']
['nan' 'nan' 'nan']
['nan' 'nan' 'nan']
['nan' 'nan' 'nan']
['nan' 'nan' 'nan']
['nan' 'nan' 'nan']
['nan' 'nan' 'nan']
['15-07-2014' '13:00:00' '28094.034']
['15-07-2014' '14:00:00' '28095.79']
['15-07-2014' '15:00:00' '28097.541']
['15-07-2014' '16:00:00' '28099.26']
['15-07-2014' '17:00:00' '28101.022']
['15-07-2014' '18:00:00' '28102.751']
['15-07-2014' '19:00:00' '28104.428']
['15-07-2014' '20:00:00' '28106.118']
['15-07-2014' '21:00:00' '28107.877']
['15-07-2014' '22:00:00' '28109.625']
['15-07-2014' '23:00:00' '28111.523']]
但是我想让['15-07-2014''00:00''nan']
,['15-07-2014''01:00''nan']
而不是第一个小时的['nan''nan']
如果缺少值,我应该迭代数组并手动输入日期和小时吗?还是有更简单的方法解决我的问题?我不会在数组中存储所有的日期和时间。您只需将实际数据存储在
(#of days,24)
数组中即可。并在一个单独的变量中返回开始日期。我不会在数组中存储所有的日期和时间。您只需将实际数据存储在(#of days,24)
数组中即可。并在单独的变量中返回开始日期。