Python 从Excel创建数组并添加缺少的数据

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):

我正在读取一个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):
    # 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)
数组中即可。并在单独的变量中返回开始日期。