将数据按照时期使用平均值填充
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()