pandas(八)--实战一下

背景

收到一批数据,数据形式。采集数据的间隔时间是10分钟,全天采集数据,每天的数据量是144条
在这里插入图片描述
处理后的数据形式
在这里插入图片描述

分析

  1. 去除表格中的q的异常值,置为0
  2. 去除重复行
  3. 将原始表格中的date分裂成日期和时间
  4. 缺失的时间点数据补0,否则无法将单列数据reshape成二维表的形式
  5. reshape df_empty.pivot

代码实现

# coding:utf-8
from tqdm import tqdm
import numpy as np
import pandas as pddef compute_uniq_dates(df):uniq_dates = df['date'].unique()## 取出一天的时间间隔 -- 时间点for uniq_date in uniq_dates:single_info = df[df['date'] == uniq_date]num_data = len(single_info)if num_data == 144:time_sep = single_info['time']breakprint('time_sep \n', time_sep)return uniq_dates,time_sepdef concate_dates(df,uniq_dates,time_sep):count = 0miss_date = [] ## 缺数据的日期## 建立空表,拼接每天的结果df_empty = pd.DataFrame(columns=['date', 'time', 'q'])  ## 保存最后的结果## 有哪些天有缺失数据,分别缺了过少条for uniq_date in tqdm(uniq_dates):single_info = df[df['date'] == uniq_date]num_data = len(single_info)## 判断原始表格中这天的数据是否完整,不完整补齐,多了去掉## 完整直接使用原始表格中的数据if num_data != 144:if num_data < 144:miss_date.append(uniq_date)else:  ## > 144条的print('duplicate uniq_date', uniq_date)count += 1## temp_df 保存当天的数据。如果原始表格中有数据,用原始表格中数据;# 如果原始表格中没有数据,用0代替temp_df = {'date': pd.Series(np.array([uniq_date for i in range(len(time_sep))])),'time': pd.Series(np.array(time_sep.tolist())),'q': pd.Series(np.array([0. for i in range(len(time_sep))]))}  # 没有设置index的Seriestemp_df = pd.DataFrame(temp_df, columns=['date', 'time', 'q'])## 不够的补齐数据for sample_time in time_sep:  ## 时间点 8:00try:## 取出原始表格中 当前日期和时间的q值,并赋值给新表格中相同日期和时间点## 如果原始表格中无法取出这个数据,说明这个数据丢失,使用temp_df在定义时的0代替actual_val = single_info.loc[(single_info['date'] == uniq_date) & (single_info['time'] == sample_time), 'q'].values.tolist()[0]temp_df.loc[(temp_df['date'] == uniq_date) & (temp_df['time'] == sample_time), 'q'] = float(actual_val)except:  ## 表示时间点不存在,维持0continue## 当原始数据中同一个时间点有两个数据,且数据不相等时,新表和旧表的同一天的q值的和不同## 此部分用于找出原始数据中的问题数据if True:if int(single_info['q'].sum()) != int(temp_df['q'].sum()):print(single_info['q'].sum())print(temp_df['q'].sum())print('uniq_date,sample_time unequal sum', uniq_date, sample_time)# exit()## 一天天地去拼接数据df_empty = pd.concat([df_empty, temp_df], axis=0)else:df_empty = pd.concat([df_empty, single_info], axis=0)return df_empty,miss_datedef parse_df(df,save_path):print('processing ......')df['time'] = pd.to_datetime(df['date']).dt.timedf['date'] = pd.to_datetime(df['date']).dt.date# 去除重复行df = df.drop_duplicates()## 去掉异常值df_new = df[df['q'] > 10]df = df_new[df_new['q'] < 600]# # 使用duplicated()函数找出重复行# duplicate_rows = df[df.duplicated()]## 采的数据日期和时间点uniq_dates, time_sep = compute_uniq_dates(df)df_empty,miss_date = concate_dates(df,uniq_dates,time_sep)print('df_empty\n', df_empty)# 重新排列表格成目标形式# df = df_empty.pivot(index='time', columns='date', values='q').fillna(0)df = df_empty.pivot(index='date', columns='time', values='q').fillna(0)# 重置索引df = df.reset_index()## 保存结果df.to_csv(save_path, index=False)fw = open('miss_date.txt', 'w')for da in miss_date:line = da.strftime('%Y-%m-%d') + '\n'fw.write(line)print('miss date', miss_date)exit()
if __name__ =='__main__':csv_path = 'temp.csv'save_path = 'output.csv'df = pd.read_csv(csv_path, encoding='utf-8')parse_df(df,save_path)

遇到的问题

  1. 无法打开文件UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbc in position 2: invalid start byte
    解决办法:用记事本打开csv文件,更改编码方式是TUTF-8
  2. 如何取出原始表格中的日期和时间
df['time'] = pd.to_datetime(df['date']).dt.time
df['date'] = pd.to_datetime(df['date']).dt.date ## 覆盖原始的date
  1. 如何取出原始表格中指定日期和时间的q值,并更新到新表格中
    使用loc取出数据,原始数据中存在一个时间点多个数据,且数据不相同,无法用duplicate去掉,这里取的第一个值
# 取出原始表格中 当前日期和时间的q值,并赋值给新表格中相同日期和时间点
## 如果原始表格中无法取出这个数据,说明这个数据丢失,使用temp_df在定义时的0代替
actual_val = single_info.loc[(single_info['date'] == uniq_date) & (single_info['time'] == sample_time), 'q'].values.tolist()[0]
temp_df.loc[(temp_df['date'] == uniq_date) & (temp_df['time'] == sample_time), 'q'] = float(actual_val)
  1. 上述处理后,表格的形式为下面的这种形式,如何转成目标形式呢?
    在这里插入图片描述
# 重新排列表格成目标形式
## 时间-日期形式
# df = df_empty.pivot(index='time', columns='date', values='q').fillna(0)
## 日期-时间形式
df = df_empty.pivot(index='date', columns='time', values='q').fillna(0)
# 重置索引
df = df.reset_index()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/184366.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity C++交互

一、设置Dll输出。 两种方式&#xff1a; 第一&#xff1a;直接创建动态链接库工程第二&#xff1a;创建的是可执行程序&#xff0c;在visual studio&#xff0c;右键项目->属性(由exe改成dll) 二、生成Dll 根据选项Release或Debug&#xff0c;运行完上面的生成解决方案后…

如何修改Window电脑的远程登陆端口

主要步骤如下&#xff1a; 1、找到运行对话框&#xff0c;一种方法是&#xff1a;开始->附件->运行&#xff1b;另外一种是快捷键winR组合键。 2、Regedit&#xff0c;在对话框中输入regedit命令&#xff0c;然后回车。备份注册表。手动备份注册表 2.1选择“ 开始 ”&am…

如何使用 CSS columns 布局来实现自动分组布局?

最近在项目中碰到这样一个布局&#xff0c;有一个列表&#xff0c;先按照 4 2 的正常顺序排列&#xff0c;当超过 8 个后&#xff0c;会横向重新开始 4 2 的布局&#xff0c;有点像一个个独立的分组&#xff0c;然后水平排列&#xff0c;如下 图中序号是 dom 序列&#xff0c;所…

【算法心得】When data range not large, try Bucket sort

https://leetcode.com/problems/maximum-number-of-coins-you-can-get/description/?envTypedaily-question&envId2023-11-24 I solve this problem by sorting piles first, and choose piles for(let i1;i<(piles.length/3)*2;i2) but: o(≧口≦)o Problem must …

ISCTF2023新生赛Misc部分WP

ISCTF2023新生赛部分WP MISC&#xff1a;签到&#xff1a;你说爱我&#xff1f;尊嘟假嘟&#xff1a;小蓝鲨的秘密&#xff1a;easy_zip:杰伦可是流量明星&#xff1a;蓝鲨的福利&#xff1a;Ez_misc:PNG的基本食用:小猫&#xff1a;MCSOG-猫猫&#xff1a;镜流:stream&#xf…

基于OpenCV的手势识别系统设计与开发

摘要 随着计算机技术与信息处理技术迅速发展&#xff0c;智能化电子设备逐渐进入到日常的生产和生活中&#xff0c;与此同时&#xff0c;人们对电子设备操作过程的便捷化也提出了新的要求&#xff0c;这也促使计算机进行图像处理的技术也得到了发展。近些年兴起的模式识别技术…

1.自动化运维工具Ansible的安装

1.物料准备 四台服务器&#xff0c;其中一个是主控机&#xff0c;三个为host 2.安装 在主控机上安装ansible 2.1 设置EPEL仓库 Ansible仓库默认不在yum仓库中&#xff0c;因此我们需要使用下面的命令启用epel仓库。 yum install epel-release -y2.2 执行安装命令 yum i…

网站上https协议,nginx配置SSL,443端口

nginx配置ssl 要给自己的网站上ssl证书&#xff0c;使用https协议。首先你需要有证书文件&#xff0c;这个文件是你买的服务&#xff0c;买过之后别人会给你。 就是这样的文件&#xff1a; 然后你就把文件上传到服务器的一个位置&#xff0c;你记住这个位置&#xff0c;后面配…

java审计之java反序列化-CC链

介绍 序列化的本质是内存对象到数据流的一种转换&#xff0c;我们知道内存中的东西不具备持久性&#xff0c;但有些场景却需要将对象持久化保存或传输。 在Java工程中&#xff0c;序列化还广泛应用于JMX&#xff0c;RMI&#xff0c;网络传输&#xff08;协议包对象&#xff09…

封装Redis工具类(泛型返回加函数式声明参数)

小编最近在看实战redis&#xff0c;黑马的&#xff0c;看到有一章是P46封装Redis工具类 废话不多说&#xff01;直接上代码 调用的代码&#xff1a; //具体的上下文代码去b站找黑马redis入门到实战 P46集//优雅的写出这样&#xff0c;参数意义看方法&#xff01; Shop shop …

万字长文——这次彻底了解LLM大语言模型

文章目录 前言一、浅析语言模型中的核心概念1.1分词&#xff1a;1.2词向量&#xff1a;1.3神经概率语言模型 二、大语言模型发展历程三、LLM基本结构3.1预训练阶段工作步骤3.2预训练阶段模型结构3.3Fine-tuning&#xff08;微调&#xff09; 前言 在深入学习LLM&#xff08;大…

Java-MyBatis

1.基础 1.1 pom <dependencies><!--MyBatis核心--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency><!--MySql驱动--><dependency&…

看看京东的接口优化技巧,确实很优雅!!

大家好&#xff0c;最近看到京东云的一位大佬分享的接口优化方案&#xff0c;感觉挺不错的&#xff0c;拿来即用。建议收藏一波或者整理到自己的笔记本中&#xff0c;随时查阅&#xff01; 下面是正文。 一、背景 针对老项目&#xff0c;去年做了许多降本增效的事情&#xf…

10分钟的时间,带你彻底搞懂JavaScript数据类型转换

前言 &#x1f4eb; 大家好&#xff0c;我是南木元元&#xff0c;热衷分享有趣实用的文章&#xff0c;希望大家多多支持&#xff0c;一起进步&#xff01; &#x1f345; 个人主页&#xff1a;南木元元 目录 JS数据类型 3种转换类型 ToBoolean ToString ToNumber 对象转原…

23.Oracle11g的UNDO表空间

Oracle的UNDO表空间 一、UNDO表空间概述1、什么是UNDO表空间2、UNDO表空间的作用2.1 提供一致性读2.2 回滚事务2.3 实例恢复 3、UNDO表空间的工作机制 二、UNDO表空间的相关操作1、UNDO表空间的创建2、UNDO表空间的管理 三、Oracle 11g中UNDO表空间的新特性1、UNDO表空间自动管…

token认证机制,基于JWT的Token认证机制实现,安全性的问题

文章目录 token认证机制几种常用的认证机制HTTP Basic AuthOAuthCookie AuthToken AuthToken Auth的优点 基于JWT的Token认证机制实现JWT的组成认证过程登录请求认证 对Token认证的五点认识JWT的JAVA实现 基于JWT的Token认证的安全问题确保验证过程的安全性如何防范XSS Attacks…

循环神经网络RNN

1. 背景 RNN(Recurrent Neural Networks) CNN利用输入中的空间几何结构信息&#xff1b;RNN利用输入数据的序列化特性。 2. SimpleRNN单元 传统多层感知机网络假设所有的输入数据之间相互独立&#xff0c;但这对于序列化数据是不成立的。RNN单元用隐藏状态或记忆引入这种依赖…

CSS特效022:小球抛物线效果

CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧&#xff0c;主要包含CSS布局&#xff0c;CSS特效&#xff0c;CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点&#xff0c;CSS特效主要是一些动画示例&#xff0c;CSS花边是描述了一些CSS…

open3d-点云及其操作

open3d提供了一个专门用于点云的数据结构 PointCloud。 class PointCloud(Geometry3D):color # 颜色normals # 法向量points # 点云def __init__(self, *args, **kwargs):"""__init__(*args, **kwargs)Overloaded function.1. __init__(self: open3d.cpu.py…

数据探索:五款免费数据可视化工具概览

数据可视化是解读和传达数据的重要方式&#xff0c;而现在有许多免费的工具可供选择&#xff0c;让您在探索数据时更轻松、更有趣。以下是五款推荐的免费数据可视化工具&#xff1a; Tableau Public&#xff1a; Tableau Public是一款功能强大的可视化工具&#xff0c;能够创建…