导入导出
跨目录导入指定文件
将多个dataframe数据导出为多个sheets
import sys
sys.path.append('/日常/月周期/data/')
Holtwinter1 = pd.read_excel('/日常/月周期/data/yzq_pred_426-83.xlsx')
with pd.ExcelWriter(r'./jieguo_R2/yzq原模型_R2_426-83.xlsx') as writer:
actual_Holtwinter1.to_excel(writer, sheet_name='日R2',index=False)
actual_Holtwinter10.to_excel(writer, sheet_name='总R2',index=False)
异常值处理
将所以超出95%的值映射成95%的点上
def yichang(andatamat):
P = []
for k in andatamat['value']:
if k>=andatamat['value'].mean()+3*andatamat['value'].std():
k = andatamat['value'].describe([0.95]).loc['95%']
P.append(k)
andatamat['value'] = P
return andatamat
预处理操作
1、查询某一列的指定类别的所有样本数据
# 第一种
data = data[data['kpi_code'].isin(['PM-4A220-CNT-SMSNEW-01002-01'])]
# 第二种
actual_Holtwinter = actual_Holtwinter.loc[actual_Holtwinter['kpi_code']=='PM-RZWG-CNT-00-NO-01']
2、交换dataframe列之间的位置
var_date = dataall_ultra['var_date']
dataall_ultra.drop(labels=['var_date'], axis=1,inplace = True)
dataall_ultra.insert(1, 'var_date', var_date)
3、合并多个dataframe,并重新排序
Holtwinter = pd.concat([Holtwinter,Holtwinter3]) # 两表合并
Holtwinter = Holtwinter.reset_index(drop=True)
# 多表合并
piece=[df1,df2,df3]
pd.concat(piece)
4、批量修改列里类别为指定值
字典定义,replace替换
A = {
'a列':{
'a':1,
'b':0
}
}
B = B.replace(A)
5、通过遍历每一列,查看每一列的每个类别的数量
A['a'].value_counts()
6、删除值相同的所有列
eg:某一列的值全部为0,这种
注意,pandas会将nan值也视为一个类别,所以在判断这一列的值是否唯一之前,要先删除nan值
orig_col = A.columns
drop_col = []
for col in orig_col:
col_series = A[col].dropna().unique()
```if len(col_series) == 1:
drop_col.append(col)
A = A.drop(drop_col,axis=1)
7、按指定列的类别划分数据
# 分组:将类别划分
dh = suoyou.groupby(suoyou['prediction_model_id'])
ds = pd.DataFrame(columns=suoyou.columns)
for key, value in dh:
# 分组后dh是字典格式,在通过区分键值对创建dataframe进行拼接
if key=='Holtwinter':
Holtwinter = pd.concat([ds, value])
Holtwinter = Holtwinter.reset_index(drop=True)
if key == '环比':
huanbi = pd.concat([ds, value])
huanbi = huanbi.reset_index(drop=True)
if key == '周周期':
yuezhouqi = pd.concat([ds, value])
yuezhouqi = yuezhouqi.reset_index(drop=True)
if key == '月周期':
zhouzhouqi = pd.concat([ds, value])
zhouzhouqi = zhouzhouqi.reset_index(drop=True)
时间处理
1、根据一个日期提取指定间隔日期
now_time_query = ‘2021-02-15’
begin_time_query = datetime.datetime(int(str(now_time_query)[0:4]),
int (now_time_query[5:7]),
int (now_time_query[8:10]))-datetime.timedelta(days=99)
print('begin_time_query',begin_time_query)
begin_time_query = begin_time_query.strftime("%Y-%m-%d")
2、将dataframe类型的时间戳格式的列改为str
actual['begin_time'] = actual['begin_time'].apply(lambda x: x.strftime("%Y-%m-%d %H:%M:%S"))
3、获取指定间隔时间的所有日期
def get_date_list(begin_date,end_date):
date_list = [x.strftime('%Y-%m-%d') for x in list(pd.date_range(start=begin_date, end=end_date))]
return date_list