pandas填充(扩增)数据

该博客探讨了如何利用pandas库在时间序列数据中填充缺失值,通过插值方法如平均值来确保数据的连续性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将数据按照时期使用平均值填充

import os
import numpy as np
import pandas as pd

def extent_data(begin, end, len_data):
    """

    :param begin:
    :param end:
    :return:
    """
    d = get_d(begin,end,len_data)
    return [np.around(begin+i*d,decimals=2) for i in range(len_data)]

def get_d(be,en,i_D):
    """
    获取两个值之间的公差
    :param be: 起始值
    :param en: 结束值
    :param i_D: 索引差距
    :return: 公差
    """
    if be == en:
        return 0
    D_value = abs(en - be)
    d = (D_value)/i_D
    if en < be:
        return -d
    return d

def extent(begin_data,end_data,ben, end):
    """
    扩充数据
    :param begin_data:数据开始值
    :param end_data: 数据结束值
    :param ben: 日期开始
    :param end: 日期结束
    :return:
    """
    # print(begin_data,end_data,ben, end)
    data_list = pd.date_range(ben,end)[:-1]
    len_data = len(data_list)

    # 间隔好几个月时就用0值填充
    if len_data > 30:
        ex = [0 for _ in range(len_data)]
    else:
        ex = extent_data(begin_data, end_data, len_data)
    new = pd.Series(data=ex, index=data_list)
    return new

def process_one_col(org):
    """
    把这一列的数据按照日期扩充到每一天
    :return:
    org[0]:起始值
    org[1]:结束值
    org.index[0]:起始时间
    org.index[1]:结束时间
    """
    return extent(org[0],org[1],org.index[0],org.index[1])

def process_two_rows(df):
    """
    根据两行数据进行扩充
    :return:
    """
    # 扩充索引
    data_list = pd.date_range(df.index[0], df.index[1])[:-1]

    # 组建新的DataFrame,扩充每一列
    new_data = pd.DataFrame(index=data_list)
    for col in df.columns:
        new_data[col] = process_one_col(df[col])
    return new_data


def run():
    path = 'D:/关于毕业/开题/数据/orgin_data.xlsx'
    data = pd.read_excel(path, sheet_name='Sheet1', index_col='日期')
    data_len = len(data)
    new = pd.DataFrame()
    for ind in range(0,data_len-1):
        two_rows = data.iloc[ind:ind+2,:]
        ret = process_two_rows(two_rows)
        print(ret)
        new = new.append(ret)
    save_path = 'C:/Users/ctt/Desktop'
    new.to_excel(os.path.join(save_path,'new_one.xlsx'), sheet_name='肉禽蛋')
    print(new)


if __name__=='__main__':
    run()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值