import pandas as pd import numpy as np import os from pprint import pprint from pandas import DataFrame from scipy import interpolate data_1_hour_predict_raw = pd.read_excel('./data/附件1 监测点A空气质量预报基础数据.xlsx' ) data_1_hour_actual_raw = pd.read_excel('./data/附件1 监测点A空气质量预报基础数据.xlsx' ) data_1_day_actual_raw = pd.rea df_1_predict = data_1_hour_actual_raw df_1_actual = data_1_day_actual_raw df_1_predict.set_axis( ['time', 'place', 'so2', 'no2', 'pm10', 'pm2.5', 'o3', 'co', 'temperature', 'humidity', 'pressure', 'wind', 'direction'], axis='columns', inplace=True) df_1_actual.set_axis(['time', 'place', 'so2', 'no2', 'pm10', 'pm2.5', 'o3', 'co'], axis='columns', inplace=True) modeltime_df_actual = df_1_actual['time'] modeltime_df_pre = df_1_predict['time'] df_1_actual = df_1_actual.drop(columns=['place', 'time']) df_1_predict = df_1_predict.drop(columns=['place', 'time']) df_1_predict = df_1_predict.replace('—', np.nan) df_1_predict = df_1_predict.astype('float') df_1_predict[df_1_predict < 0] = np.nan # 重新插入time列 df_1_actual.insert(0, 'time', modeltime_df_actual) df_1_predict.insert(0, 'time', modeltime_df_pre) # 线性插值的方法需要单独处理最后一行的数据 data_1_actual = df_1_actual[0:-3] data_1_predict = df_1_predict data_1_predict.iloc[-1:]['pm10'] = 22.0 data_1_actual_knn = df_1_actual[0:-3] data_1_predict_knn: DataFrame = df_1_predict for indexs in data_1_actual.columns: if indexs == 'time': continue data_1_actual['rownum'] = np.arange(data_1_actual.shape[0]) df_nona = data_1_actual.dropna(subset=[indexs]) f = interpolate.interp1d(df_nona['rownum'], df_nona[indexs]) data_1_actual[indexs] = f(data_1_actual['rownum']) data_1_actual = data_1_actual.drop(columns=['rownum']) for indexs in data_1_predict.columns: if indexs == 'time': continue data_1_predict['rownum'] = np.arange(data_1_predict.shape[0]) df_nona = data_1_predict.dropna(subset=[indexs]) f = interpolate.interp1d(df_nona['rownum'], df_nona[indexs]) data_1_predict[indexs] = f(data_1_predict['rownum']) data_1_predict = data_1_predict.drop(columns=['rownum']) writer = pd.E
时间: 2024-02-23 22:01:05 浏览: 93
pandas read_excel()和to_excel()函数解析
这段代码主要是对一份空气质量预报基础数据进行处理和插值,具体的解释如下:
1. 导入需要的库和模块:
```
import pandas as pd
import numpy as np
import os
from pprint import pprint
from pandas import DataFrame
from scipy import interpolate
```
2. 读取 excel 文件中的数据:
```
data_1_hour_predict_raw = pd.read_excel('./data/附件1 监测点A空气质量预报基础数据.xlsx' )
data_1_hour_actual_raw = pd.read_excel('./data/附件1 监测点A空气质量预报基础数据.xlsx' )
data_1_day_actual_raw = pd.read_excel('./data/附件1 监测点A空气质量预报基础数据.xlsx' )
```
3. 对读取的数据进行处理:
```
df_1_predict = data_1_hour_actual_raw
df_1_actual = data_1_day_actual_raw
df_1_predict.set_axis( ['time', 'place', 'so2', 'no2', 'pm10', 'pm2.5', 'o3', 'co', 'temperature', 'humidity', 'pressure', 'wind', 'direction'], axis='columns', inplace=True)
df_1_actual.set_axis(['time', 'place', 'so2', 'no2', 'pm10', 'pm2.5', 'o3', 'co'], axis='columns', inplace=True)
```
4. 提取时间列并进行插值:
```
modeltime_df_actual = df_1_actual['time']
modeltime_df_pre = df_1_predict['time']
df_1_actual = df_1_actual.drop(columns=['place', 'time'])
df_1_predict = df_1_predict.drop(columns=['place', 'time'])
df_1_predict = df_1_predict.replace('—', np.nan)
df_1_predict = df_1_predict.astype('float')
df_1_predict[df_1_predict < 0] = np.nan
df_1_actual.insert(0, 'time', modeltime_df_actual)
df_1_predict.insert(0, 'time', modeltime_df_pre)
data_1_actual = df_1_actual[0:-3]
data_1_predict = df_1_predict
data_1_predict.iloc[-1:]['pm10'] = 22.0
data_1_actual_knn = df_1_actual[0:-3]
data_1_predict_knn: DataFrame = df_1_predict
for indexs in data_1_actual.columns:
if indexs == 'time':
continue
data_1_actual['rownum'] = np.arange(data_1_actual.shape[0])
df_nona = data_1_actual.dropna(subset=[indexs])
f = interpolate.interp1d(df_nona['rownum'], df_nona[indexs])
data_1_actual[indexs] = f(data_1_actual['rownum'])
data_1_actual = data_1_actual.drop(columns=['rownum'])
for indexs in data_1_predict.columns:
if indexs == 'time':
continue
data_1_predict['rownum'] = np.arange(data_1_predict.shape[0])
df_nona = data_1_predict.dropna(subset=[indexs])
f = interpolate.interp1d(df_nona['rownum'], df_nona[indexs])
data_1_predict[indexs] = f(data_1_predict['rownum'])
data_1_predict = data_1_predict.drop(columns=['rownum'])
```
5. 最后将处理好的数据写入 excel 文件:
```
writer = pd.ExcelWriter('./data/附件1 监测点A空气质量预报基础数据_preprocessed.xlsx')
data_1_predict.to_excel(writer, sheet_name='1小时预测数据', index=False)
data_1_predict_knn.to_excel(writer, sheet_name='1小时预测数据_knn', index=False)
data_1_actual.to_excel(writer, sheet_name='1天实际数据', index=False)
data_1_actual_knn.to_excel(writer, sheet_name='1天实际数据_knn', index=False)
writer.save()
```
总体来说,这段代码主要是对空气质量预报基础数据进行了一些预处理和插值,最终将处理好的数据写入了 excel 文件中。
阅读全文