当前位置: 首页 > article >正文

Pandas学习入门一

1.什么是Pandas?

Pandas是一个强大的分析结构化数据的工具集,基于NumPy构建,提供了高级数据结构数据操作工具,它是使Python成为强大而高效的数据分析环境的重要因素之一。

  • 一个强大的分析和操作大型结构化数据集所需的工具集
  • 基础是NumPy,提供了高性能矩阵的运算
  • 提供了大量能够快速便捷地处理数据的函数和方法
  • 应用于数据挖掘,数据分析
  • 提供数据清洗功能

2.DataFrame

DataFrame 是一个二维标签化数据结构,你可以将其想象为一个 Excel 电子表格或者 SQL 表,或者是一个字典类型的集合。

# 创建一个 DataFrame 对象,支持自定义数据、索引、列名和数据类型。
pd.DataFrame(data, index, columns, dtype, copy)
# index 行索引
# columns 列索引

2.1 行索引

import numpy as np
import pandas as pd# 1.数组、列表或元组构成的字典构造dataframe
# 构造一个字典
data = {'A': [1, 2, 3, 4],'B': (5, 6, 7, 8),'C': np.arange(9, 13)
}# 构造dataframe
frame = pd.DataFrame(data)
print(frame)
print(type(frame))
# index 查看行属性
print("行属性:---", frame.index)
# #3.字典构成的字典构造dataframe
# 字典嵌套
data1 = {"a": {"apple": 3.6, "banana": 5.6},"b": {"apple": 3, "banana": 5},"c": {"apple": 3.2}
}
print(data1)
pd2 = pd.DataFrame(data1)
print(pd2)

series 构成字典构成 dataframe

# series 构成字典构成 dataframe
pd1 = pd.DataFrame({"a": pd.Series(np.arange(3)),"b": pd.Series(np.arange(3, 5))
})
print("---", pd1)

3.DataFrame的基本使用

3.1 .T转置

# DataFrame
pd5 = pd.DataFrame(np.arange(9).reshape(3,3),index=['a','c','b'],columns=['A','B','C'])
print(pd5)
# 和numpy一样进行转置   行和列
pd5.T

3.2 行索引

# index属性查看行索引
frame.index
# 指定行索引
frame = pd.DataFrame(data,index=['a','b','c','d'])
print(frame)

3.3 列索引

# columns属性查看列索引
frame.columns
# 指定列索引
frame = pd.DataFrame(data,index=['a','b','c','d'],columns=['B','A','C','D'])
frame

3.4 Series构成的字典构造dataframe

pd1 = pd.DataFrame({'a':pd.Series(np.arange(3)),'b':pd.Series(np.arange(3,5))})print(pd1)

3.4字典嵌套

#3.字典构成的字典构造dataframe
#字典嵌套
data1 = {'a':{'apple':3.6,'banana':5.6},'b':{'apple':3,'banana':5},'c':{'apple':3.2}
}
pd2 = pd.DataFrame(data1)
print(pd2)

3.5 列表类

2D ndarray 构造dataframe

# 构造二维数据对象
arr1 = np.arange(12).reshape(4,3)
print(arr1)
frame1 = pd.Dataframe(arr1)
print(frame1)

字典构成的列表构造dataframe

#2 字典构成的列表构造dataframe
l1 = [{'apple':3.6,'banana':5.6},{'apple':3,'banana':5},{'apple':3.2}]
pd3 = pd.DataFrame(l1)
print(pd3)

Series构成的列表构造dataframe

#3 Series构成的列表构造dataframe
l2 = [pd.Series(np.random.rand(3)),pd.Series(np.random.rand(2))]
pd4 = pd.DataFrame(l2)
print(pd4)

4.Series

1.Series介绍

2.创建方式

1.通过list创建

import numpy as np
import pandas as pd
# 1.通过list创建
s1 = pd.Series([1,2,3,4,5])
print(s1)

2.通过数组创建

# 2.通过数组创建
import numpy as np
import pandas as pd
arr1 = np.arange(1,6)
s2 = pd.Series(arr1) 
print(s2)
# 索引  索引默认0开始的整型序列    
# 索引长度和数据长度一致
s3 = pd.Series(arr1,index=['a','b','c','d','e'])
print(s3)
# 查看值
print(s3.values)
print(s3.index)  # 索引对象

3.通过字典创建

# 3 通过字典创建
dict = {'name':'姚明','age':18,'class':'二班'}
s4 = pd.Series(dict,index=['age','class','name','sex'])
print(s4)

3.Series基本使用

3.1检查缺失值

s4.isnull()   # 判断是否为空
s4.notnull()   # 判断是否为不为空
# 3.2 通过索引获取数据
print(s4.index)
print(s4.values)
# 下标  负号索引支持
s4[0]
# 标签名
s4['age']
# 选取多个
s4[[1,3]]
s4[['name','age']]
# 切片
s4[1:4] 
s5 = s4['name':'age':-1]  # 标签切片  包含末端数据   顺序
s3[s3>3]
# 索引与数据对应关系不会被运算结果影响
s3 + 2
# index
# values
# name属性
s3.name = 'temp'  # 对象名
s3.index.name = 'year' #  对象索引名s3
s3

5.pandas链接数据库

默认显示行数会压缩

1.读取mysql数据

# 设置显示的最大行数为None(无限制)
pd.set_option('display.max_rows', None)# 设置显示的最大列数为None(无限制)
pd.set_option('display.max_columns', None)
# 设置宽度,以便更宽的屏幕可以展示更多内容
pd.set_option('display.width', 1000)

也可以通过

# 查看最后五行数据
df.tail(5)
# 查看前五行数据
df.head(5)
"""
@Time    : 2025/5/22 16:13
@Author  : white.tie
@File    : 03mysql.py
@Desc    : 读取mysql中的数据
"""import pandas as pd
from sqlalchemy import create_engineimport pandas as pd# 设置显示的最大行数为None(无限制)
pd.set_option('display.max_rows', None)# 设置显示的最大列数为None(无限制)
pd.set_option('display.max_columns', None)
# 设置宽度,以便更宽的屏幕可以展示更多内容
pd.set_option('display.width', 1000)# 密码中的@需要转义为%40
engine = create_engine('mysql+pymysql://spider:zzwl%402024@192.168.0.103:3307/spider')
sql = """select * from ware_price_202502 limit 100
"""
df = pd.read_sql(sql,engine)
print(df)
df.to_excel('output.xlsx', index=False)

2.将数据写入Mysql

frame1.to_sql('ware_price_aaa',engine,index=False)
sql = """select * from ware_price_202502 limit 100
"""
df = pd.read_sql(sql,engine)
# print(df)
# df.to_excel('output.xlsx', index=False)
frame1 = df.head(3)
result = frame1["raw_defect_url"]
# print(result[0])
frame1["raw_defect_url"][0] = result[0].replace("ahs-creative.oss-cn-shanghai","ali.oss-cn-hangzhou")
print(frame1)
frame1.to_sql('ware_price_aaa',engine,index=False)
print("ok")

其中to_sql默认会创建新表,如果追加可以使用

frame1.to_sql('ware_price_aaa',engine,index=False, if_exists="append")

6.数据清洗

1.处理缺失数据

  • pd.fillna()

  • pd.dropna()

在这里插入图片描述

2.数据转换

2.1 处理重复数据

duplicated()返回布尔型Series表示每行是否为重复行

示例代码:

import numpy as np
import pandas as pddf_obj = pd.DataFrame({'data1': ['a'] * 4 + ['b'] * 4,'data2': np.random.randint(0, 4, 8)}
)
print(df_obj)
print("----")
# duplicated()返回布尔型Series表示每行是否为重复行
print(df_obj.duplicated())

2.2 利用函数或映射进行数据转换

根据map传入的函数对每行或每列进行转换

示例代码:

ser_obj = pd.Series(np.random.randint(0,10,10))
print(ser_obj)print(ser_obj.map(lambda x : x ** 2))

2.3 替换值

replace根据值的内容进行替换
# 单个值替换单个值
print(ser_obj.replace(1, -100))# 多个值替换一个值
print(ser_obj.replace([6, 8], -100))# 多个值替换多个值
print(ser_obj.replace([4, 7], [-100, -200]))

3. 字符串操作

3.1 字符串方法

请添加图片描述

请添加图片描述

3.2 正则表达式方法

请添加图片描述

3.3 pandas字符串函数:

请添加图片描述

"""
@Time    : 2025/5/26 13:45
@Author  : white.tie
@File    : 06str_alter.py
@Desc    : 
"""
import pandas as pd
if __name__ == '__main__':str_ = pd.Series(["AAA ","Aa B","a Aa"," aaa"])print(str_.str.lower())print(str_.str.len())   # 计算字符串长度str_strip = str_.str.rstrip()    # 去除右边空格print(str_strip)print(str_strip.str.len())str_lstrip = str_.str.lstrip()    # 去除左边空格print(str_lstrip)print(str_lstrip.str.len())

4.重塑

1. stack

  • 将列索引旋转为行索引,完成层级索引
  • DataFrame->Series
import numpy as np
import pandas as pddf_obj = pd.DataFrame(np.random.randint(0,10, (5,2)), columns=['data1', 'data2'])
print(df_obj)stacked = df_obj.stack()
print(stacked)

结果如下

   data1  data2
0      4      6
1      8      2
2      1      3
3      1      6
4      6      5
0  data1    4data2    6
1  data1    8data2    2
2  data1    1data2    3
3  data1    1data2    6
4  data1    6data2    5
dtype: int32

2.unstack

  • 将层级索引展开
  • Series->DataFrame
  • 默认操作内层索引,即level=-1

示例代码:

# 默认操作内层索引
print(stacked.unstack())# 通过level指定操作索引的级别
print(stacked.unstack(level=0))

运行结果:

# print(stacked.unstack())data1  data2
0      7      9
1      7      8
2      8      9
3      4      1
4      1      2# print(stacked.unstack(level=0))0  1  2  3  4
data1  7  7  8  4  1
data2  9  8  9  1  2

7.数据聚合与分组

  • 什么是分组聚合?如图:

    请添加图片描述

  • groupby:(by=None,as_index=True)

    by:根据什么进行分组,用于确定groupby的组

as_index:对于聚合输出,返回以组便签为索引的对象,仅对DataFrame

import pandas as pd
df1 = pd.DataFrame({'fruit':['apple','banana','orange','apple','banana'],'color':['red','yellow','yellow','cyan','cyan'],'price':[8.5,6.8,5.6,7.8,6.4]})
type(df1.groupby('fruit'))

聚合

#Groupby对象具有上表中的聚合方法#根据fruit来求price的平均值
df1['price'].groupby(df1['fruit']).mean()
fruit
apple     8.15
banana    6.60
orange    5.60
Name: price, dtype: float64     
#或者
df1.groupby('fruit')['price'].mean()#as_index=False
df1.groupby('fruit',as_index=False)['price'].mean()fruit    price
0    apple    8.15
1    banana    6.60
2    orange    5.60"""
如果我现在有个需求,计算每种水果的差值,
1.上表中的聚合函数不能满足于我们的需求,我们需要使用自定义的聚合函数
2.在分组对象中,使用我们自定义的聚合函数
"""
#定义一个计算差值的函数
def diff_value(arr):return arr.max() - arr.min()
#使用自定义聚合函数,我们需要将函数传递给agg或aggregate方法,我们使用自定义聚合函数时,会比我们表中的聚合函数慢的多,因为要进行函数调用,数据重新排列
df1.groupby('fruit')['price'].agg(diff_value)
fruit
apple     0.7
banana    0.4
orange    0.0
Name: price, dtype: float64

相关文章:

Pandas学习入门一

1.什么是Pandas? Pandas是一个强大的分析结构化数据的工具集,基于NumPy构建,提供了高级数据结构和数据操作工具,它是使Python成为强大而高效的数据分析环境的重要因素之一。 一个强大的分析和操作大型结构化数据集所需的工具集基础是NumPy…...

基于Piecewise Jerk Speed Optimizer的速度规划算法(附ROS C++/Python仿真)

目录 1 时空解耦运动规划2 PJSO速度规划原理2.1 优化变量2.2 代价函数2.3 约束条件2.4 二次规划形式 3 算法仿真3.1 ROS C仿真3.2 Python仿真 1 时空解耦运动规划 在自主移动系统的运动规划体系中,时空解耦的递进式架构因其高效性与工程可实现性被广泛采用。这一架…...

关于 JavaScript 版本、TypeScript、Vue 的区别说明, PHP 开发者入门 Vue 的具体方案

以下是关于 JavaScript 版本、TypeScript、Vue 的区别说明,以及 PHP 开发者入门 Vue 的具体方案: 一、JavaScript 版本演进 JavaScript 的核心版本以 ECMAScript 规范(ES) 命名: 版本发布时间关键特性ES52009严格模式…...

中断和信号详解

三种中断 中断分为三种:硬件中断、异常中断、软中断 硬件中断 设备向中断控制器发送中断请求,中断控制器生成对应中断号,然后通过中断引脚向cpu发送高电平,cpu收到请求后不会立即处理,cpu会处理完当前指令&#xff…...

STM32八股【10】-----stm32启动流程

启动流程 1.上电复位 2.系统初始化 3.跳转到 main 函数 启动入口: cpu被清空,程序从0x00000000开始运行0x00000000存放的是reset_handler的入口地址0x00000000的实际位置会变,根据不同的启动模式决定启动模式分为: flash启动&a…...

游戏引擎学习第312天:跨实体手动排序

运行游戏并评估当前状况 目前排序功能基本已经正常,能够实现特定的排序要求,针对单一区域、单个房间的场景,效果基本符合预期。 不过还有一些细节需要调试。现在有些对象的缩放比例不对,导致它们看起来有些怪异,需要…...

智警杯备赛--数据库管理与优化及数据库对象创建与管理

sql操作 插入数据 如果要操作数据表中的数据,首先应该确保表中存在数据。没有插入数据之前的表只是一张空表,需要使用insert语句向表中插入数据。插入数据有4种不同的方式:为所有字段插入数据、为指定字段插入数据、同时插入多条数据以及插…...

MySQL 在 CentOS 7 环境下的安装教程

🌟 各位看官好,我是maomi_9526! 🌍 种一棵树最好是十年前,其次是现在! 🚀 今天来学习Mysql的相关知识。 👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更…...

K8S集群主机网络端口不通问题排查

一、环境: k8s: v1.23.6 docker: 20.10.14 问题和故障现象:devops主机集群主机节点到端口8082不通(网络策略已经申请,并且网络策略已经实施完毕),而且网络实施人员再次确认,网络策…...

【Elasticsearch】retry_on_conflict

在 Elasticsearch 中,retry_on_conflict 是 _update 和 _update_by_query API 的一个参数,用于处理并发冲突。当多个客户端同时尝试更新同一个文档时,可能会发生版本冲突(version conflict)。retry_on_conflict 参数允…...

Android Cameara2 + MediaRecorder 完成录像功能

一、打开相机、预览 打开相机预览流程是Camera2的默认流程 可参考:https://blog.csdn.net/kk3087961/article/details/135616576 二、开启录像功能 开启录像主要包括以下3步: private void startRecording() {// 1. 停止预览并关闭会话if (mCameraSes…...

python打卡day39

知识点回顾 图像数据的格式:灰度和彩色数据模型的定义显存占用的4种地方 模型参数梯度参数优化器参数数据批量所占显存神经元输出中间状态 batchisize和训练的关系 课程代码: # 先继续之前的代码 import torch import torch.nn as nn import torch.opti…...

3.8.5 利用RDD统计网站每月访问量

本项目旨在利用Spark RDD统计网站每月访问量。首先,创建名为“SparkRDDWebsiteTraffic”的Maven项目,并添加Spark和Scala的依赖。接着,编写Scala代码,通过SparkContext读取存储在HDFS上的原始数据文件,使用map和reduce…...

尚硅谷redis7 49-51 redis管道之理论简介

前提redis事务和redis管道有点像,但本质上截然不同 49 redis管道之理论简介 面试题 如何优化频繁命令往返造成的性能瓶颈? redis每秒可以承受8万的写操作和接近10万次以上的读操作。每条命令都发送、处理、返回,能不能批处理一次性搞定呢…...

Spring Boot + MyBatis-Plus实现操作日志记录

创建数据库表 CREATE TABLE sys_operation_log (log_id bigint NOT NULL AUTO_INCREMENT COMMENT 日志ID,operation_type varchar(20) NOT NULL COMMENT 操作类型,operation_module varchar(50) NOT NULL COMMENT 操作模块,operation_desc varchar(200) DEFAULT NULL COMMENT …...

JavaScript入门基础篇-day03

一、为什么需要数组? 在我们正式学习数组之前,先思考一个场景:假设我们要记录一个班级50位同学的期末成绩。如果不用数组,代码会是这样的: let score1 85; let score2 92; let score3 78; // ... 要写50个变量&am…...

Leetcode-5 好数对的数目

Leetcode-5 好数对的数目&#xff08;简单&#xff09; 题目描述思路分析通过代码&#xff08;python&#xff09; 题目描述 给你一个整数数组 nums 。 如果一组数字 (i,j) 满足 nums[i] nums[j] 且 i < j &#xff0c;就可以认为这是一组 好数对 。 返回好数对的数目。 示…...

openEuler安装MySql8(tar包模式)

操作系统版本&#xff1a; openEuler release 22.03 (LTS-SP4) MySql版本&#xff1a; 下载地址&#xff1a; https://dev.mysql.com/downloads/mysql/ 准备安装&#xff1a; 关闭防火墙&#xff1a; 停止防火墙 #systemctl stop firewalld.service 关闭防火墙 #systemc…...

Opencv实用操作6 开运算 闭运算 梯度运算 礼帽 黑帽

1.相关函数 开运算 img_open cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)#&#xff08;图片&#xff0c;算法&#xff0c;核&#xff09; 闭运算 img_close cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)#&#xff08;图片&#xff0c;算法&#xff0c;核&#xff09; 梯度…...

基于python,html,flask,echart,ids/ips,VMware,mysql,在线sdn防御ddos系统

详细视频:【基于python,html,flask,echart,ids/ips,VMware,mysql,在线sdn防御ddos系统-哔哩哔哩】 https://b23.tv/azUqQXe...

Git:现代软件开发的基石——原理、实践与行业智慧·优雅草卓伊凡

Git&#xff1a;现代软件开发的基石——原理、实践与行业智慧优雅草卓伊凡 一、Git的本质与核心原理 1. 技术定义 Git是一个分布式版本控制系统&#xff08;DVCS&#xff09;&#xff0c;由Linus Torvalds在2005年为管理Linux内核开发而创建。其核心是通过快照&#xff08;Sna…...

NLua性能对比:C#注册函数 vs 纯Lua实现

引言 在NLua开发中&#xff0c;我们常面临一个重要选择&#xff1a;将C#函数注册到Lua环境调用&#xff0c;还是直接在Lua中实现逻辑&#xff1f; 直觉告诉我们&#xff0c;C#作为编译型语言性能更高&#xff0c;但跨语言调用的开销是否会影响整体性能&#xff1f;本文通过基准…...

【计算机网络】第2章:应用层—Web and HTTP

目录 一、Web 与 HTTP 二、总结 &#xff08;一&#xff09;Web 的定义与功能 &#xff08;二&#xff09;HTTP 协议的定义与功能 &#xff08;三&#xff09;HTTP 协议的核心机制 1. HTTP 请求与响应流程 2. HTTP 的连接类型 3. HTTP 的状态码 &#xff08;四&#xf…...

HarmonyOS 5 应用开发导读:从入门到实践

一、HarmonyOS 5 概述 HarmonyOS 5 是华为推出的新一代分布式操作系统&#xff0c;其核心设计理念是"一次开发&#xff0c;多端部署"。与传统的移动操作系统不同&#xff0c;HarmonyOS 5 提供了更强大的跨设备协同能力&#xff0c;支持手机、平板、智能穿戴、智慧屏…...

大数据治理:分析中的数据安全

引言 随着大数据技术在各行业的深度应用&#xff0c;海量数据蕴含的价值被不断挖掘。然而&#xff0c;数据规模的爆发式增长与分析场景的复杂化&#xff0c;使数据安全问题日益凸显。从数据泄露、隐私侵犯到非法访问&#xff0c;每一个安全漏洞都可能带来难以估量的损失。本文将…...

数字孪生技术赋能西门子安贝格工厂:全球智能制造标杆的数字化重构实践

在工业4.0浪潮席卷全球制造业的当下&#xff0c;西门子安贝格电子制造工厂&#xff08;Electronic Works Amberg, EWA&#xff09;凭借数字孪生技术的深度应用&#xff0c;构建起全球制造业数字化转型的典范。这座位于德国巴伐利亚州的“未来工厂”&#xff0c;通过虚实融合的数…...

国内高频混压PCB厂家有哪些?

一、技术领先型厂商&#xff08;聚焦材料与工艺突破&#xff09; 猎板PCB 技术亮点&#xff1a;真空层压工艺实现FR-4与罗杰斯高频材料&#xff08;RO4350B/RO3003&#xff09;混压&#xff0c;阻抗公差3%&#xff0c;支持64单元/板的5G天线模块&#xff0c;插损降低15%。 应用…...

【图像处理基石】立体匹配的经典算法有哪些?

1. 立体匹配的经典算法有哪些&#xff1f; 立体匹配是计算机视觉中从双目图像中获取深度信息的关键技术&#xff0c;其经典算法按技术路线可分为以下几类&#xff0c;每类包含若干代表性方法&#xff1a; 1.1 基于区域的匹配算法&#xff08;Local Methods&#xff09; 通过…...

day12 leetcode-hot100-19(矩阵2)

54. 螺旋矩阵 - 力扣&#xff08;LeetCode&#xff09; 1.模拟路径 思路&#xff1a;模拟旋转的路径 &#xff08;1&#xff09;设计上下左右方向控制器以及边界。比如zy1向右&#xff0c;zy-1向左&#xff1b;sx1向上&#xff0c;sx-1向下。上边界0&#xff0c;下边界hang-1&a…...

将Java应用集成到CI/CD管道:从理论到生产实践

在2025年的软件开发领域&#xff0c;持续集成与持续部署&#xff08;CI/CD&#xff09;已成为敏捷开发和DevOps的核心实践。根据2024年DevOps报告&#xff0c;85%的企业通过CI/CD管道实现了交付周期缩短50%以上&#xff0c;特别是在金融、电商和SaaS行业。Java&#xff0c;作为…...