python数浓度计算
前面已经将32×32的数据删除了不需要的列,数据变成了32×21的数据
excel的变化直径(也就是当前直径—前一个直径)为了匹配txt的32行数据,我进行了重复复制,将excel变成下图:
那么采用数浓度公式:
公式理解:
代码:
#!usr/bin/env python # -*- coding:utf-8 -*- """ @author: Suyue @file: lianxi.py @time: 2024/05/06 @desc: """ import numpy as np import pandas as pd import xlwt df1 = pd.read_excel('/lianxi/直径.xls') # delta_d = {'变化直径':[0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.188, 0.25, 0.25, 0.25, 0.25, 0.375, 0.5, 0.5, 0.5, 0.5, 0.75, 1, 1]} speed = {'速度':[0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85, 0.95, 1.1, 1.3, 1.5, 1.7, 1.9, 2.2, 2.6, 3, 3.4, 3.8, 4.4, 5.2, 6, 6.8, 7.6, 8.8, 10.4, 12, 13.6, 15.2, 17.6, 20.8]} # df1 = pd.DataFrame(delta_d) df2 = pd.DataFrame(speed) file_path = '/lianxi/53469-20220718_out.txt' # 读整个txt文件读取到单个字符串 with open(file_path, 'r', errors='ignore') as file: file_content = file.read() # 按时间戳拆分内容以查找单独的部分 # 时间戳的格式为 YYYY-MM-DD HH:MM:SS,因此我们将使用正则表达式根据此模式进行拆分 import re sections = re.split(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\n', file_content) # print(sections) # 如果txt第一个元素为空值(由于拆分),则将其删除 if not sections[0]: sections.pop(0) # 用于excel结果写入,将结果放入列表 list = [] # 前面txt有速度直径介绍标识,从第二组数据开始读 for section in sections: # 将字符串拆分为几行,然后按空格拆分每行并转换为 DataFrame lines = section.strip().split('\n') matrix = [line.split() for line in lines] df = pd.DataFrame(matrix) # 计算数浓度公式 # 按行读,一行为一个列表 n = df.iloc[:,0:21].values.astype(float) # 按列读,一列为一个列表 d = df1.iloc[:,0:21].values.astype(float) v = df2.iloc[:].values.astype(float) A = float(0.0052) t = float(60) ND = (n) / (A * t * v * d) df3 = pd.DataFrame(ND) sum_ND = df3.iloc[:,0:21].sum() # 把结果装入一个列表里方便计算后面的均值 list.append(sum_ND) # print(list) # 把列表放入dataframe里方便pandas操作计算均值 df4 = pd.DataFrame(list) # 求所有时间,每个直径的均值 column_means_list = df4.mean().tolist() print(column_means_list) # 将结果写入excel # 设置工作簿编码 f = xlwt.Workbook('encoding = utf-8') # 创建sheet工作表 sheet1 = f.add_sheet('sheet1',cell_overwrite_ok=True) for i in range(len(column_means_list)): # 写入数据参数对应 行, 列, 值 sheet1.write(i,0,column_means_list[i]) # 保存.xls到当前工作目录 f.save('/lianxi/jieguo.xls')