欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【python后处理】用python对excel数据进行积分,用以得到四种气体产量分数

程序员文章站 2022-07-08 15:43:48
无异常版本需要预处理,先手动删掉中间出现的非数字行(前三行表头不算)这里说的“异常”是中间的非数字行例如重启了算例的时候会出现下面类似行,需要手动删除import openpyxl# 创建一个工作簿wb = openpyxl.Workbook()# 创建一个test_case的sheet表单# wb.create_sheet('test_case')# 保存为一个xlsx格式的文件# wb.save('cases.xlsx')# 读取excel中的数据# 第一步:打开工作簿wb...

手动删除非数字行 EXCEL版本

需要预处理,先手动删掉中间出现的非数字行(前三行表头不算)

例如重启了算例的时候会出现下面类似行,需要手动删除
【python后处理】用python对excel数据进行积分,用以得到四种气体产量分数

import openpyxl
import sys
# 创建一个工作簿
wb = openpyxl.Workbook()
# 创建一个test_case的sheet表单
# wb.create_sheet('test_case')
# 保存为一个xlsx格式的文件
# wb.save('cases.xlsx')
# 读取excel中的数据
excelName=sys.argv[1]#外部指定一个文件名
print('load excel:', excelName)
# 第一步:打开工作簿
wb = openpyxl.load_workbook(excelName)
# 第二步:选取表单
sheetName='Sheet1'
sh = wb[sheetName]
print('load sheet:', sheetName)
# 第三步:读取数据
# 参数 row:行  column:列
#ce = sh.cell(row = 3,column = 1)   # 读取第三行,第一列的数据
#print(ce.value)
# 按行读取数据 list(sh.rows)
#print(list(sh.rows)[3:])     
Time=[]
y1=[]
y2=[]
y3=[]
y4=[]
i=0
int_y1=0
int_y2=0
int_y3=0
int_y4=0
for cells in list(sh.rows)[3:]: # 按行读取数据,去掉前三行的表头信息数据
    Time.append(cells[0].value)
    y1.append( cells[1].value)
    y2.append( cells[2].value)
    y3.append( cells[3].value)
    y4.append( cells[4].value)
    #print(Time[i],y1[i],y2[i],y3[i],y4[i])
    #积分
    if i>= 1:
        int_y1+=y1[i]*(Time[i]-Time[i-1])
        int_y2+=y2[i]*(Time[i]-Time[i-1])
        int_y3+=y3[i]*(Time[i]-Time[i-1])
        int_y4+=y4[i]*(Time[i]-Time[i-1])
    i=i+1
print('int_y1=',int_y1)
print('int_y2=',int_y2)
print('int_y3=',int_y3)
print('int_y4=',int_y4)

#归一化
sum_y=int_y1+int_y2+int_y3+int_y4
int_y1_per=int_y1/sum_y*100.0
int_y2_per=int_y2/sum_y*100.0
int_y3_per=int_y3/sum_y*100.0
int_y4_per=int_y4/sum_y*100.0
print('int_y1_per=',int_y1_per,'%')
print('int_y2_per=',int_y2_per,'%')
print('int_y3_per=',int_y3_per,'%')
print('int_y4_per=',int_y4_per,'%')
# 关闭工作薄
wb.close()

== 结果对比==

手动处理excel 结果
【python后处理】用python对excel数据进行积分,用以得到四种气体产量分数

python处理结果
【python后处理】用python对excel数据进行积分,用以得到四种气体产量分数origin积分结果
【python后处理】用python对excel数据进行积分,用以得到四种气体产量分数

手动处理和python完全一致,和origin积分基本一致

自动删除非数字行 CSV版本(推荐)

目前技术比较菜,还不能真正完全做到删除非数字行,只能先去掉所有含#的行,算是曲线救国了。望指点

import pandas as pd
# import numpy as np
import sys
import os
# import re

#读入CSV
CSV_name=sys.argv[1] #外部传入参数
#CSV_name='GAS_YIELD_AVG_ALL.csv'
print('算例位置: ',os.getcwd())
print('CSV name:',CSV_name)
df=pd.read_csv(CSV_name,error_bad_lines=False,header=2)

#重命名列名,去掉多余的# 引号和空格
print('原列名:',df.columns.values)
df.columns=['Time','y1','y2','y3','y4']
# df=df.rename(columns=lambda x: x.replace('#',''))
# df=df.rename(columns=lambda x: x.replace('\"',''))
# df.columns = df.columns.str.strip()
#print(df)
print('新列名:',df.columns.values)

#去掉含有#的行
df=df.astype('str')
df=df[~df.Time.str.contains("#")]

#去掉了#行后保存为CSV
afterCSV='afterProc_'+CSV_name
df.to_csv(afterCSV,index=False)
print('预处理后的CSV文件已保存到',afterCSV)

#转化为数组
df=df.astype('float')
Time=df.iloc[:,0].values
y1=df.iloc[:,1].values
y2=df.iloc[:,2].values
y3=df.iloc[:,3].values
y4=df.iloc[:,4].values

##以下开始进行积分处理
i=0
int_y1=0
int_y2=0
int_y3=0
int_y4=0

for i in range(len(Time)):
    if i>= 1:
        int_y1+=y1[i]*(Time[i]-Time[i-1])
        int_y2+=y2[i]*(Time[i]-Time[i-1])
        int_y3+=y3[i]*(Time[i]-Time[i-1])
        int_y4+=y4[i]*(Time[i]-Time[i-1])
    i=i+1

print('int_y1=',int_y1)
print('int_y2=',int_y2)
print('int_y3=',int_y3)
print('int_y4=',int_y4)

#归一化
sum_y=int_y1+int_y2+int_y3+int_y4
int_y1_per=int_y1/sum_y*100.0
int_y2_per=int_y2/sum_y*100.0
int_y3_per=int_y3/sum_y*100.0
int_y4_per=int_y4/sum_y*100.0
print('int_y1_per=',int_y1_per,'%')
print('int_y2_per=',int_y2_per,'%')
print('int_y3_per=',int_y3_per,'%')
print('int_y4_per=',int_y4_per,'%')

#输出到文件
doc = open('积分后四种气体组分分数.txt','w')
print('算例位置: ',os.getcwd(),file=doc)
print('处理的csv文件: ',CSV_name,file=doc)
print('积分时间区间(s): ',Time[0],' - ',Time[-1],file=doc)
print('列名:',df.columns.values,file=doc)
print(int_y1_per,file=doc)
print(int_y2_per,file=doc)
print(int_y3_per,file=doc)
print(int_y4_per,file=doc)
print('积分结果已经输出到"积分后四种气体组分分数.txt"')
doc.close()

== 结果==
【python后处理】用python对excel数据进行积分,用以得到四种气体产量分数

本文地址:https://blog.csdn.net/weixin_43940314/article/details/112604018

相关标签: Python 后处理