pandas---数据处理(excel文件)

news2024/12/24 11:30:33

近期在弄一个项目的前期数据,所以总结了一下,内容如下(以下以csv文件为例)

  • 1. DataFrame常用操作
    • 1.1 DataFrame去除空行
      • (1)对于一般空行
      • (2)对于列表式(list)空行
    • 1.2 数据的填充
      • (1)表格中填充0
    • 1.3 数据的删除
      • (1)DataFrame获取某一列的数据并去重
      • (2)删除指定行(某列包含某些特定值的行)
      • (3)删除指定列
      • (4)删除多行(某行中单元数据存在重复值)
      • (5)删除多行(按多列条件删除多行)
    • 1.4 数据的获取及筛选
      • (1)获取某一行某一列的数据值
      • (2)以某一列为比较条件的所有行
      • (3)按组别筛选出每一种数据
      • (4)多条件筛选数据
      • (5)数据的排序及分组(先排序,后分组)
    • 1.5 数据的插入
      • (1)数据的插入(一列)
      • (2)数据的插入(多列)
      • (3)实现数据分隔并换列插入存储
      • (4)实现DataFrame的if else判断,并将生成的数据插入表格
      • (5)多重条件&多where嵌套,并将生成的数据插入表格
    • 1.6 数据的修改
      • (1)列数据的替换
      • (2)按照某一列的值更改另一列的值
      • (3)根据判断条件来更换表格中数据的值
    • 1.7 数据的后期处理
      • (1)实现两表的拼接
      • (2)按某一字段排序
      • (3)重置索引
  • 2. 日期
    • 2.1 计算两个日期间的总天数
    • 2.2 日期的递增,类别的联合表格生成
    • 2.3 按时间递增生成数据

1. DataFrame常用操作

1.1 DataFrame去除空行

(1)对于一般空行

### 删掉空行
data_use=data_use[~(data_use['elec_ap'].isnull())]
## 法2
df = df[df['A'] != 0]
## 法3
machine_name_time = 'machine_name'
data.dropna(subset=[machine_name_time],inplace=True)
## 法4
### 去空,inplace=True才会修改原表格的数据,否则并不会修改原表格的数据
data_use.dropna(how='any', axis=0,inplace=True)

(2)对于列表式(list)空行

### 现将表格中为  []  的值变为NaN
## df['value'] = df['value'].str[0] 可去掉空值行,但会将第一列数据变为该行数组元素的第一个元素
##可借助辅助列(value_2),后再删除该辅助列,也可以直接if判断操作
df['value_2'] = df['value'].str[0]
### 再去除有空行存在的列,必须加inplace=True,否则原数据并不会改变
df.dropna(inplace=True)

第一步
第二步
第三步

1.2 数据的填充

(1)表格中填充0

merge_group = merge_group.fillna(0)
merge_group

表格中填充0

1.3 数据的删除

(1)DataFrame获取某一列的数据并去重

### 获取电器设备一栏并去重
result = data['elec_ap'].unique()

DataFrame列数据去重

(2)删除指定行(某列包含某些特定值的行)

##df.drop([0],axis=1)
data.drop(data[data['elec_aps']=='电冰箱'].index,axis=0,inplace=True)
data

删除指定列

(3)删除指定列

df.drop(["one"],axis=1)

删除指定列

(4)删除多行(某行中单元数据存在重复值)

### 用于装重复的行下标
same_datas = []
for index, row in data_c.iterrows():     
    row_lists=list(row)
    #print(index,row_lists)
    ## 用来判断,防止每行单元数据重复
    values = []
    flag = True
    for value in row:
        if value in values:
            flag = False
        else:
            values.append(value)
    if flag == False:
        same_datas.append(index)
# 将存在重复单元格的行从data中去除
data.drop(same_datas,inplace=True)

(5)删除多行(按多列条件删除多行)

## 删除多列
df.drop_duplicates(subset=['a', 'b'], keep='first', inplace=False)

1.4 数据的获取及筛选

(1)获取某一行某一列的数据值

for index in range(0,len(itemSet_between_more)):
	num = itemSet_between_more.iloc[index]['数量']
	print(num)
	#itemSet_between_more如下图

itemSet_between_more表格
获取的数据

(2)以某一列为比较条件的所有行

data_A = data_use[data_use['degree']=='A']
data_A

找出某一列满足某条件的所有行

(3)按组别筛选出每一种数据

### 注意:elec_aps是一个[],elec_ap是DataFrame中的列数据
for index in range(0,len(elec_aps)):
    ### 获取某一行数据
    data_per = data[data['elec_ap']==elec_aps[index]]
    print(data_per)

按种类分组

(4)多条件筛选数据

keys = ['T0.00', 'T01.00', 'T02.00', 'T03.00']
data_between = data_use.loc[(data_use[keys[1]] > 1)|(data_use[keys[3]] > 1)]
data_between

多条件筛选数据

(5)数据的排序及分组(先排序,后分组)

说明:防止分组后同样的数据顺序不一致,导致数据误差

 ##按日期分组获取列表
 ### 先以elec_ap列实现排序,放置数据乱序
    item_single_list = data_use.sort_values(
        'elec_ap',ascending=False
    ).groupby(
        by='rq'
    ).apply(
        lambda x:list(x.elec_aps)
    )

1.5 数据的插入

(1)数据的插入(一列)

data.insert(loc=2,column='degree',value='A')
### 参数说明:
loc:插入的位置
column:插入列的名字,多列:column=['列名_A','列名_B']
value:插入的值(value=列A,列A=[......]),多列:value=[列A,列B]

(2)数据的插入(多列)

## type(y_machine_label):list(12),type(y_powers):list(15*12)
for i in range(len(y_machine_label)):
    df[y_machine_label[i]]=y_powers[i]

(3)实现数据分隔并换列插入存储

elec_aps = []
for item in data_use['elec_ap']:
    #print(item.split('_')[-1])
    elec_aps.append(item.split('_')[-1])
### df.replace(to_replace, value) 前面是需要替换的值,后面是替换后的值。
data_use.insert(loc=2,column='elec_aps',value=elec_aps)
data_use

数据分隔并换列存储

插入前数据
插入后数据

(4)实现DataFrame的if else判断,并将生成的数据插入表格

data_use[item] = np.where(data_use[key_use[index]]>1, 
                     "["+data_use['elec_aps'].map(str) + "," + str((index+1)*2-1)+"]","")
说明:
data_use[新增的列名] = np.where(原列表判断条件, 表达式1,表达式2)
根据判断条件对数据进行判断,符合则表达式1,否知则表达式2,并将该值赋给表格新增列

DataFrame的if/else

(5)多重条件&多where嵌套,并将生成的数据插入表格

data_use["test_time"] = np.where((data_use["elec_time_T01.00"]!="")&(data_use["elec_time_T03.00"]!=""),
                        data_use["elec_time_T01.00"].map(str) + "," + data_use["elec_time_T03.00"].map(str), 
                        np.where(data_use["elec_time_T01.00"]!="",data_use["elec_time_T01.00"].map(str),data_use["elec_time_T03.00"].map(str)
              )
    )

多where嵌套

1.6 数据的修改

(1)列数据的替换

### 直接在原列名上修改即可
data['基于'] = items_A
data

(2)按照某一列的值更改另一列的值

### 根据data_use['elec_ap']列的值进行判断,来改变data_use['degree']的值,并把值赋给data_use['degree']列
### data_use['degree'].mask(data_use['elec_ap'] == '湖北_樱桃_B', 'B') 并不会改变原表格数据的值
data_use['degree'] = data_use['degree'].mask(data_use['elec_ap'] == '湖北_樱桃_B', 'B')
data_use['degree'] = data_use['degree'].mask(data_use['elec_ap'] == '湖北_苹果_E', 'B')

根据某一条件更改另一处的值

(3)根据判断条件来更换表格中数据的值

keys = ['rydl', 'T0.00', 'T01.00', 'T02.00','T03.00']
### 此处阈值为1,根据阈值来实现数据的替换
for item_time in keys:
    data_use.loc[data_use[item_time]>=1,item_time] = 1
    data_use.loc[data_use[item_time]<1,item_time] = 0

根据条件更换数值

1.7 数据的后期处理

(1)实现两表的拼接

### 注意:需要两个表的列名一致,才会进行值比较并且拼接
### 若不一致,则会根据便利原则,将不同列之间的值进行一次拼接
merge_group = pd.merge(A_machine,my_data,how="left")
merge_group
## 扩展
keys = ['elec_time_T01.00','elec_time_T03.00] #为将从表格中去除的列名
data_tt.drop(keys, axis=1).join(df_2)

表格间拼接

(2)按某一字段排序

###表示pd按照xxx这个字段排序,inplace默认为False,如果该值为False,那么原来的pd顺序没变,只是返回的是排序的
result_low.sort_values("置信度",inplace=True,ascending=False)
result_low

(3)重置索引

## 按置信度从高到低排序
### drop=True, 删除原有索引,建立新索引, drop = False 保留原有索引,添加重置索引。
result_low.reset_index(drop=True, inplace=True)
result_low

2. 日期

2.1 计算两个日期间的总天数

### 计算总日期
import datetime
d1 = datetime.datetime(2019,3,4) # 第一个日期
d2 = datetime.datetime(2019,11,30) # 第二个日期
interval = d2 - d1 # 两日期差距
interval.days # 具体的天数

两日期间隔时间

2.2 日期的递增,类别的联合表格生成

# 指定开始日期是2019/03/04,指定结束日期为2019/11/30
import datetime
date_start = datetime.date(2019,3,4)
# 指定需要加(减)的天数
delta = datetime.timedelta(days = 1)
n_days = date_start
### 生成设备类别
elec = ['A', 'B', 'C', 'D', 'E']
rqs = []  #用于记录日期
elec_aps = []  #用于记录设备
while n_days.strftime('%Y/%m/%d')!='2019/11/30':
    # 每次以 前一天的日期 为基础累加一天
    n_days = n_days + delta
    #print(n_days.strftime('%Y/%m/%d'))
    for value in elec:
        rqs.append(n_days.strftime('%Y/%m/%d'))
        elec_aps.append(value)
## 将rqs,elec_aps数据生成表格
A_data = pd.DataFrame({
    'rq':rqs,
    'elec_aps':elec_aps
})
A_data 

表格生成

2.3 按时间递增生成数据

import pandas as pd 
#20171231 12:50时间点开始,生成以月为间隔,长度为5的时间段 
tm_rng = pd.date_range('20171231 12:50',periods=5,freq='M') 
 
print(type(tm_rng)) 
DatetimeIndex(['2017-12-31 12:50:00', '2018-01-31 12:50:00','2018-02-28 12:50:00', '2018-03-31 12:50:00',

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

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

相关文章

Redis(二)对事务进行操作及Jedis

系列文章目录 Redis入门笔记&#xff08;一&#xff09;&#xff1a;Redis在Linux下安装和八大数据类型 文章目录 系列文章目录前言Redis对事务进行操作开启事务&#xff1a;multi执行事务&#xff1a;exec放弃事务&#xff1a;discard编译型异常&#xff08;命令错误&#xf…

信息安全-数据安全-字节大数据平台安全与权限治理实践

导读&#xff1a;本次分享题目为字节跳动大数据平台安全与权限治理实践&#xff0c;文章会围绕下面四点展开&#xff1a; 字节大数据安全体系现状和难点 细粒度权限管控和治理 资产保护能力 数据删除能力 分享嘉宾&#xff5c;许从余 火山引擎 数据平台产品经理 编辑整理&#…

Spring 5 笔记 - 新功能

1. Spring 5 框架新功能 整个Spring 5 框架的代码基于Java8&#xff0c;运行时兼容JDK9&#xff0c;许多不建议使用的类和方法在代码库中删除。Spring 5.0 框架自带了通用的日志封装 &#xff08;1&#xff09;Spring 5 已经移除 Log4jConfigListener&#xff0c;官方建议使用…

立创EDA标准版指南1-原理图与封装库

立创 EDA 标准版 由于立创 EDA 新版本改了对应术语&#xff0c;这是对于的表格&#xff1a; 原理图库->符号 PCB 库->封装 PCB 3D 库->3D 模型 下面的全部讲述将依据旧版称呼&#xff0c;因为更直观&#xff0c;新版称呼模棱两可并且与 AD 的工程架构差别较大 这是…

数据分析11——Pandas中数据偏移/数据切分/数据结构转换

数据偏移&#xff1a; 1、shift函数&#xff1a; 在 Pandas 中&#xff0c;shift 函数用于将数组的数据向前或向后平移指定的步数。它可以应用于 Series 或 DataFrame 类型的数据中&#xff0c;并返回一个平移后的新数据结构&#xff0c;其中每个元素都被取代为原始序列中对应…

kubernetes根据podName获取对应的主机pid

获取指定的podName kubectl get pods -n demo -owide登录对应的主机执行docker命令,获取到容器的id docker ps | grep PODNAME拿到的容器id&#xff0c;执行如下命令 获取容器的长的容器id docker inspect container_id找到容器id后 执行 apt-get install jq cat /var/lib…

关于Word文档的处理【笔记】

关于Word文档的处理【笔记】 前言推荐关于Word文档的处理一、解压word如何恢复1 准备2 解压3 恢复 二、对word文档进行图片替换1 首先解压word文档2 进入word文档存放图片的路径3 批量给图片添加水印4 替换原来的media文件5 压缩为docx文件6 打开 最后 前言 2023-5-20 11:00:1…

uniapp 快手授权登录,发布、编辑、裁剪图片和视频,分享 Ba-Kwai

简介&#xff08;下载地址&#xff09; 快手授权登录&#xff0c;发布、编辑、裁剪图片和视频&#xff0c;一键智能裁剪&#xff0c;分享私信&#xff0c;打开用户主页&#xff0c;挂载小程序等。自带选择图片和选择视频方法。 抖音授权登录、发布、分享 Ba-Aweme&#xff08…

基于GitLab搭建DevSecOps流水线

本博客地址&#xff1a;https://security.blog.csdn.net/article/details/130734964 一、GitLab安装 GitLab是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建Web服务&#xff0c;可通过Web界面访问公开的或者私人的项目。它…

【总结】数据建模调研与设计

一、数据建模背景和目的 1.1 数据建模任务背景 a. xxxx 中台新增数据建模模块&#xff0c;对标行业最佳实践&#xff0c;补齐数据中台短板。 b. 以往的数据建模&#xff0c;包括数仓模型的设计、数仓模型的落地&#xff0c;都是通过第三方的工具&#xff0c;例如DBwaver、Nav…

SOFA Weekly|SOFA 大事记、Layotto 社区会议回顾与预告、社区本周贡献

SOFA WEEKLY | 每周精选 筛选每周精华问答&#xff0c;同步开源进展 欢迎留言互动&#xff5e; SOFAStack&#xff08;Scalable Open Financial Architecture Stack&#xff09;是蚂蚁集团自主研发的金融级云原生架构&#xff0c;包含了构建金融级云原生架构所需的各个组件&am…

【信息安全案例】——应用软件安全(学习笔记)

&#x1f4d6; 前言&#xff1a;随着应用软件日益增多&#xff0c;与我们的生活深度绑定&#xff0c;应用软件的安全性问题愈发凸显。针对恶意代码、代码漏洞等安全风险&#xff0c;必须加强安全意识&#xff0c;采取有效措施进行防范。合理有效的安全措施能够确保用户的信息安…

(数字图像处理MATLAB+Python)第九章图像形态学运算-第一、二节:形态学基础和二值形态学运算

文章目录 一&#xff1a;形态学基础&#xff08;1&#xff09;结构元素&#xff08;2&#xff09;程序 二&#xff1a;二值形态学的基础运算&#xff08;1&#xff09;基本形态变换A&#xff1a;膨胀运算①&#xff1a;概述②&#xff1a;示例③&#xff1a;程序 B&#xff1a;…

CleanMyMac X4.13.4中文版下载及使用教程

随着Mac电脑的广泛普及&#xff0c;越来越多的用户开始关注如何保持自己电脑的快速运行。众所周知&#xff0c;Mac电脑的性能和稳定性得到了广泛认可。但是&#xff0c;随着使用时间的增加和数据的增加&#xff0c;任何电脑都可能变得缓慢和难以使用。为了解决这一问题&#xf…

2-《Java进阶》

2-《Java进阶》 一. java多线程&#xff08;非常重要&#xff09;1.1. 线程java多线程实现方式主要有&#xff1a;1.继承Thread 2.实现Runnable3.实现CallableRunnable 与 Callable的区别&#xff1a;1.2. 线程的状态有哪些&#xff1f;1.3. 线程的状态转换及控制1.4. Java如何…

SeaweedFs使用-通过http接口实现文件操作

通过http接口实现文件操作 SeaweedFs可通过filer的http接口/master中的http接口来进行文件上传 1.通过master的接口进行上传文件 通过各种方式进行请求接口&#xff1a;http://localhost:9333/submit, ip和端口号是master服务的信息。此接口通过post请求方式将文件的二进制流…

3-《安卓基础》

3-《安卓基础》 1.Android系统架构2.四大组件1Activity1.1 生命周期1.2. Activity四种启动模式1.3.Activity任务栈的概念1.3.Activity的显示启动和隐示启动1.4.scheme使用场景&#xff0c;协议格式&#xff0c;如何使用&#xff1f;1.5.activty间传递数据的方式1.6.跨进程启动A…

网络安全-kail linux渗透测试(基础篇)

渗透测试是一个非常广的课程&#xff0c;我们首先要做的是在某个方向精通&#xff0c;再在其他方面也要有涉猎。 大部分的漏洞是国外挖掘的。 一、推荐研究书籍&#xff1a; Metasploit浚透测试指南》肯尼(行业经典) 诸葛建伟翻译 《Metasloit渗透测试魔鬼训练营》诸葛建伟…

运用pyecharts制作可视化大屏(代码展示及效果图-动图)

一、Matplotlib绘图 折线图 import matplotlib.pyplot as plt # 调用画图库 plt.rcParams[font.sans-serif] [SimHei] # 设置成可以显示中文&#xff0c;字体为黑体 plt.figure(figsize(12,8)) # 调整图片尺寸 x [周一,周二,周三,周四,周五,周六,周日] # 设置x轴数据 y [401…

物联网网络通讯知识

RTU是什么 RTU英文全称Remote Terminal Units&#xff0c;中文全称为远程终端单元。远程终端设备(RTU)是安装在远程现场的电子设备&#xff0c;用来监视和测量安装在远程现场的传感器和设备。通俗理解就是能够编程的还可以将数据传输到服务器的工具。RTU内部是包含通讯模块的&…