python对离散功率点进行积分得到电耗

2023-11-14

data = pd.read_csv(r"C:\Users\EDY\Desktop\******.csv")
data

from scipy.integrate import trapz
scipy.integrate.trapz(y,x)
scipy.integrate.trapz(y,dx=2)

主要使用trapz()函数,y为离散的功率列表,x为时间戳点列表,由于实际情况导致我的x并不是连续的,两个算出来的结果相差较大,但是我的数据是2s一次,所以我直接选择dx=2来计算,算出来和根据soc算出的值相差不多,所以结果更加贴近实际值。
各位使用的时候请按照实际情况来选择。

import pandas as pd
import numpy as np
import scipy
from scipy.integrate import trapz

def calculate_power_integrals(data):
	#转为列表
    array_chassis = pd.to_numeric(data["chassisPower"])
    array_upper = pd.to_numeric(data["upperPower"])
    list_chassis_power = array_chassis.tolist()
    list_upper_power = array_upper.tolist()
	#数据nan预处理
    for i in range(len(list_chassis_power)):
        if np.isnan(list_chassis_power[i]):
            list_chassis_power[i]=(list_chassis_power[i-1]+list_chassis_power[i+1])/2
        if np.isnan(list_upper_power[i]):
            list_upper_power[i]=(list_upper_power[i-1]+list_upper_power[i+1])/2
	#再次判断是否有nan
    if True in np.isnan(list_chassis_power):
        print("list_chassis_power has nan.")
    if True in np.isnan(list_upper_power):
        print("list_upper_power has nan.")

    y_chassis = list_chassis_power
    y_upper = list_upper_power

    integrals_chassis = []
    integrals_upper = []
	
	#每个点算出来进行保存,但是只需要取最后一个值就是积分结果
    for i in range(len(y_chassis)):
    	# /60/60 因为单位需要
        integrals_chassis.append(trapz(y_chassis[:i + 1], dx=2)/60/60)
        integrals_upper.append(trapz(y_upper[:i + 1], dx=2)/60/60)
	#
    print("底盘电耗积分结果:"+ str(integrals_chassis[len(integrals_chassis)-1]))
    print("上装电耗积分结果:"+str(integrals_upper[len(integrals_upper)-1]))
    integrals_chassis=np.round(integrals_chassis,2)
    integrals_upper=np.round(integrals_upper,2)
    return integrals_chassis, integrals_upper



因为mysql查出来结果包括很对不同车和不同的日期,把每天每车的数据拿进函数进行计算得到每天的结果

# 创建一个空的dataframe,包含需要写入的列名
df = pd.DataFrame(columns=['VIN', 'day', 'integrals_chassis','integrals_upper'])
#对于两个DataFrame对象,可以使用merge函数将它们按照vin列和time列进行连接。
#需要将两个DataFrame的连接方式指定为inner,并且指定on参数为['vin', 'day'],表示按照vin列和day列进行连接。具体语法如下:
unique_vin_day = merged_df[['VIN',"day_x"]].dropna().drop_duplicates()

for i in range(len(unique_vin_day)) :
    index_vin = unique_vin_day.iloc[(i,0)]
    index_day =  unique_vin_day.iloc[(i,1)]
    result_df = merged_df[(merged_df['VIN'] == index_vin) & (merged_df['day_x'] == index_day)]
    integrals_chassis, integrals_upper =calculate_power_integrals(result_df)
    df.loc[i] = [index_vin, index_day, integrals_chassis[len(integrals_chassis)-1],integrals_upper[len(integrals_upper)-1]]

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python对离散功率点进行积分得到电耗 的相关文章

随机推荐

  • 从一个数组中随机取出若干个数

    随机取数 下面给出从一个数组随机取出若干数字组成新书组和从一个数组随机取出一个数字的方法 代码如下 从一个数组中随机取出若干个元素组成数组 param Array arr 原数组 param Number count 需要随机取得个数 co
  • 如何确保事务提交后才执行异步操作

    参考博客TransactionSynchronizationManager和TransactionSynchronizationAdapter 场景 业务流程背景 对于 法律法规 法规库 标签管理 列表中的某一条数据 操作完标注和解析按钮后
  • Angular离线API文档安装指南

    需要的材料 nginx 官方angularjs zip 完整包 步骤 1 先上www angular org 下载个完整的zip包 2 到nginx 网站下载 nginx 3 修改 nginx 1 6 2 conf nginx conf 文
  • 利用win10自带的工具测硬盘读写速度

    利用win10自带的硬盘测试工具测读写速度 一 win q 打开搜索框 输入 cmd 找到命令提示符 右击以管理员身份运行 二 在命令框里输入 winsat disk 是默认测试系统盘的速度 不出意外都是C盘 三 当我们要想测试其他盘的时候
  • MySQL学习笔记——MySQL数据类型(拉勾教育数据分析实战训练营学习笔记)

    MySQL学习笔记 MySQL数据类型 MySQL数据库中 每一条数据都有其数据类型 主要可以分为数值型 字符串型和日期时间型三大类 说明如下所示 数值类型 TINYINT 一个非常小的整数 占1字节 如果是有符号 范围是 128 127
  • MFC窗口销毁过程

    MFC窗口销毁过程 考虑单窗口情况 假设自己通过new创建了一个窗口对象pWnd 然后pWnd gt Create 则销毁窗口的调用次序 1 手工调用pWnd gt DestroyWindow 2 DestroyWin
  • Elasticsearch实战-磁盘IO被打满

    背景 事情是这样的 一天下午4点42分左右 业务反馈我开发的服务在测试环境出现问题 返回资源数据是0 查日志发现是ES访问超时 相当于数据库挂了 持续了20多分钟自己恢复 咨询了ES团队 最终得到下面的答复 当前集群现状 1 当前集群数据I
  • python爬取研究生招生网招生信息

    import requests from bs4 import BeautifulSoup from pandas core frame import DataFrame import re import time class Gradua
  • Nginx惊群问题

    Nginx惊群问题 1 简介 简单来说 多线程 多进程 linux下线程进程也没有多大区别 等待同一个socket事件 当这个事件发生时 这些线程 进程被同时唤醒 就是惊群 可以想见 效率很低下 许多进程被内核重新调度唤醒 同时去响应这一个
  • 07.JavaWeb-Vue+elementUI

    1 Vue 功能替代JavaScript和jQuery 基于JavaScript实现的前端框架 1 1配置Vue 1 1 1引入vue库 方法一 通过cdn链接引入最新版本的vue 可能会慢些 方法二 将vue库下载到本地 通过相对路径引入
  • SpringFramework核心技术三:Spring的验证机制

    Spring验证 Spring 3引入了对其验证支持的几项增强 首先 现在完全支持JSR 303 Bean验证API 其次 当以编程方式使用时 Spring的DataBinder现在可以验证对象并绑定到它们 第三 Spring MVC现在支
  • 【已解决】容器镜像安装vim的踩坑之路

    一 背景 在部署 Elasticsearch 7 17 7 版本时 进入到改容器后 发现该镜像没有vi 同时使用apt也无法正常安装 于是百度找解决方案 一步一坑 最后完美解决 二 解决 首先进入镜像中 docker exec it es
  • springboot+mysql物流车辆管理系统-计算机设计源码84722

    摘要 由于数据库和数据仓库技术的快速发展 物流车辆管理系统建设越来越向模块化 智能化 自我服务和管理科学化的方向发展 物流车辆管理系统对处理对象和服务对象 自身的系统结构 处理能力 都将适应技术发展的要求发生重大的变化 物流车辆管理系统除了
  • 基于深度学习的智慧城市火灾检测方法

    1 文章信息 本次介绍的文章是在2022年发表在Electronics的一篇文章 文章题目为 Fire Detection Method in Smart CityEnvironments Using a Deep Learning Bas
  • 工厂方法模式-Factory Method Pattern

    工厂方法模式 Factory Method Pattern 工厂方法模式 Factory Method Pattern 定义一个用于创建对象的接口 让子类决定将哪一个类实例化 工厂方法模式让一个类的实例化延迟到其子类 工厂方法模式又简称为工
  • 【爬虫】九、综合案例之m3u8文件

    视频网站常规处理方法 用户上传视频 gt 转码 处理视频 gt 切片处理 把单个文件进行拆分 一般把拆分好的文件放到M3U8 txt json的文本中 用户在拖动进度条时则进入到某个分片中 需要一个文件记录 1 视频播放顺序 2 视频存放路
  • 通过“hay的素质理论“,分析个人的学习能力

    1 学习能力是什么 大家觉得 学习能力不就是看书更快 更好的理解记忆 考试拿高分的能力吗 到了职场 还固步自封在应试教育阶段 就有点呵呵了 虽然面试官也会问 最近有看什么书啊 能给我们讲讲里面内容吗 但面试官绝对不只是想了解 你是不是爱看书
  • webgl学习之路(三)——透视投影矩阵的推导过程

    关于透视投影矩阵的讲解 网上有不少教程 但是有一点大家基本上都没有讲清楚 就是z轴坐标 这里的Z轴相当于景深 的推导过程 基本上是一笔带过 下面先从头开始讲推导过程 再慢慢说Z轴的推导过程 透视投影如下图 透视投影的过程如下 所观察的物体在
  • 前端实现拖拽效果改变元素顺序

    文章目录 前言 一 实现效果 二 拖拽API 1 代码 2 遇见问题 总结 前言 在一次工作中 前端要实现通过鼠标实现拖拽改变顺序的功能 之前没有接触过拖拽这一块所以刚开始一筹莫展 幸运的是在查阅学习中实现了前端拖拽功能 一 实现效果 二
  • python对离散功率点进行积分得到电耗

    data pd read csv r C Users EDY Desktop csv data from scipy integrate import trapz scipy integrate trapz y x scipy integr