Python 插值代码实现并将数据多列写入csv文件

Python 插值代码实现并将数据多列写入csv文件

def interpolation(n_days_filename_csv, ):  #插值成一分钟的数据

    # 取出读取的n天的数据为数据插值做准备

    data = pd.read_csv(filepath_or_buffer=n_days_filename_csv, usecols=[0, 1, 2, 3])  # dataframe类型

    # time = data.iloc[:, 0].values.astype('int')  # 因为新写入的ndays的csv文件没有列名
    # x = data.iloc[:, 1].values.astype('float64')
    # y = data.iloc[:, 2].values.astype('float64')
    # z = data.iloc[:, 3].values.astype('float64')
    # print(time.shape, x.shape) #time.shape(len(time), 1) x.shape(len(time), 1)

    time = data.loc[:, ['time']].values.astype('int')
    x = data.loc[:, ['x']].values.astype('float64')
    y = data.loc[:, ['y']].values.astype('float64')
    z = data.loc[:, ['z']].values.astype('float64')


    print('插值前取数据集3天的x轴的数据的batchmark的rmse',
          math.sqrt(mean_squared_error(x[look_back:], x[look_back - 1:-1])))


    #进行插值
    time =time.reshape(-1)
    x =x.reshape(-1)
    y =y.reshape(-1)
    z =z.reshape(-1)

    # linear   , quadratic二次插值
    f_x = interpolate.interp1d(time, x, kind= "linear")  #线性插值
    f_y = interpolate.interp1d(time, y, kind= "linear")
    f_z = interpolate.interp1d(time, z, kind= "linear")

    # for i in range(len(time) - 1):  #多得到的采样频率都是一定的,没必要进行多次循环,大于一分钟的进行插值
    if time[len(time) - 2] - time[len(time) - 3] >= 60:
        time_new = [j for j in range(time[0], time[len(time) - 1], 60)] # for j in range(time[i], time[i+1], 60):
		 #range(start, stop[, step]) -> range object
		 
        time_new.append(time[len(time) - 1])
        x_new = f_x(time_new)
        y_new = f_y(time_new)
        z_new = f_z(time_new)

    time_new = np.array(time_new) #将time_new, x_new等从list转化为numpy数组
    
	#写入csv文件,多列写入
    csvfile = open("new_datas_linear.csv", 'wt' ,encoding="UTF8", newline='')  #
    writer=csv.writer(csvfile, delimiter=",")
    header=['time_new','x_new', 'y_new', 'z_new']
    csvrow1=[]
    csvrow2=[]
    csvrow3=[]
    csvrow4=[]
    for i in range(len(time_new)):
        csvrow1.append(time_new[i])
        csvrow2.append(x_new[i])
        csvrow3.append(y_new[i])
        csvrow4.append(z_new[i])

    writer.writerow(header)
    writer.writerows(zip(csvrow1, csvrow2, csvrow3, csvrow4))

    csvfile.close()

    new_data_filename = "new_datas_linear.csv"

    return new_data_filename
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值