「日拱一码」014 Python常用库——Pandas

目录

数据结构

 pandas.Series :一维数组,类似于数组,但索引可以是任意类型,而不仅仅是整数

pandas.DataFrame :二维表格型数据结构,类似于 Excel 表格,每列可以是不同的数据类型

数据读取与写入

读取数据

 pd.read_csv() :读取 CSV 文件

pd.read_excel() :读取 Excel 文件

pd.read_sql() :从数据库读取数据

写入数据

 DataFrame.to_csv() :将数据写入 CSV 文件

DataFrame.to_excel() :将数据写入 Excel 文件

DataFrame.to_sql() :将数据写入数据库

 数据选择与索引

基于标签的索引

DataFrame.loc :按标签选择数据

Series.loc :按标签选择数据

基于位置的索引

DataFrame.iloc :按位置选择数据

Series.iloc :按位置选择数据

布尔索引

数据清洗与预处理

处理缺失值

DataFrame.dropna() :删除缺失值

DataFrame.fillna() :填充缺失值

数据类型转换

DataFrame.astype() :转换数据类型

重复数据处理

DataFrame.drop_duplicates() :删除重复数据

数据分组与聚合

 分组

DataFrame.groupby() :对数据进行分组

聚合

GroupBy.sum() :计算每组的总和

GroupBy.mean() :计算每组的平均值

GroupBy.agg() :自定义聚合函数

数据合并与连接

合并

pd.concat() :沿特定轴连接多个对象

DataFrame.merge() :基于共同列合并数据

连接

 DataFrame.join() :按索引连接两个对象

数据排序与排名

排序

DataFrame.sort_values() :按值排序

DataFrame.sort_index() :按索引排序

排名

DataFrame.rank() :对数据进行排名

数据时间序列

时间序列创建

pd.date_range() :创建日期范围

 pd.to_datetime() :将字符串转换为日期时间格式

时间序列操作

DataFrame.resample() :对时间序列数据进行重采样

DataFrame.shift() :将数据沿时间轴移动

数据可视化

DataFrame.plot() :绘制数据图表

Series.plot() :绘制序列图表


Pandas 是 Python 中一个功能强大的数据分析库,它提供了大量用于数据处理、分析和转换的方法。以下按照不同的功能类别详细介绍 Pandas 库中常用的方法:

数据结构

  •  pandas.Series :一维数组,类似于数组,但索引可以是任意类型,而不仅仅是整数
  • pandas.DataFrame :二维表格型数据结构,类似于 Excel 表格,每列可以是不同的数据类型
## 数据结构
import pandas as pd# 创建 Series, s.index获取索引, s.values获取数据值
s = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
print(s)
# a    1
# b    2
# c    3
# dtype: int64print(s.index)  # Index(['a', 'b', 'c'], dtype='object')
print(s.values)  # [1 2 3]# 创建 DataFrame, df.index获取行索引, df.columns获取列索引, df.values获取数据值
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
print(df)
#    A  B
# 0  1  4
# 1  2  5
# 2  3  6print(df.index)  # RangeIndex(start=0, stop=3, step=1)
print(df.columns)  # Index(['A', 'B'], dtype='object')
print(df.values)
# [[1 4]
#  [2 5]
#  [3 6]]

数据读取与写入

读取数据

  •  pd.read_csv() :读取 CSV 文件
  • pd.read_excel() :读取 Excel 文件
  • pd.read_sql() :从数据库读取数据
## 数据读取与写入
# 读取数据
import pandas as pd
import sqlite3# 读取 CSV 文件
df = pd.read_csv('data.csv')
print(df)# 读取 Excel 文件
df = pd.read_excel('data.xlsx')
print(df)# 从 SQLite 数据库读取数据
conn = sqlite3.connect('database.db')
df = pd.read_sql('SELECT * FROM table_name', conn)
print(df)

写入数据

  •  DataFrame.to_csv() :将数据写入 CSV 文件
  • DataFrame.to_excel() :将数据写入 Excel 文件
  • DataFrame.to_sql() :将数据写入数据库
# 写入数据
import pandas as pd
import sqlite3# 写入 CSV 文件
df.to_csv('output.csv', index=False)# 写入 Excel 文件
df.to_excel('output.xlsx', index=False)# 将数据写入 SQLite 数据库
df.to_sql('table_name', conn, if_exists='replace', index=False)

 数据选择与索引

基于标签的索引

  • DataFrame.loc :按标签选择数据
## 数据选择与索引# 按标签选择数据
import pandas as pd# 创建一个 DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['row1', 'row2', 'row3'])
print("原始 DataFrame:")
print(df)
#       A  B
# row1  1  4
# row2  2  5
# row3  3  6# 按标签选择单个元素
print("\n选择 'row1' 行和 'A' 列的元素:")
print(df.loc['row1', 'A'])  # 1# 按标签选择多行和多列
print("\n选择 'row1' 和 'row2' 行,以及 'A' 和 'B' 列:")
print(df.loc[['row1', 'row2'], ['A', 'B']])
#       A  B
# row1  1  4
# row2  2  5# 按标签选择所有行,但只选择特定列
print("\n选择所有行,但只选择 'B' 列:")
print(df.loc[:, 'B'])
# row1    4
# row2    5
# row3    6
# Name: B, dtype: int64
  • Series.loc :按标签选择数据
# 创建一个 Series
s = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
print("\n原始 Series:")
print(s)
# 原始 Series:
# a    1
# b    2
# c    3
# dtype: int64# 按标签选择单个元素
print("\n选择 'a' 索引的元素:")
print(s.loc['a'])  # 1# 按标签选择多个元素
print("\n选择 'a' 和 'c' 索引的元素:")
print(s.loc[['a', 'c']])
# a    1
# c    3
# dtype: int64

基于位置的索引

  • DataFrame.iloc :按位置选择数据
# 基于位置的索引
import pandas as pd# 创建一个 DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
print("原始 DataFrame:")
print(df)
#    A  B
# 0  1  4
# 1  2  5
# 2  3  6# 按位置选择单个元素
print("\n选择第1行第1列的元素:")
print(df.iloc[0, 0])  # 1# 按位置选择多行和多列
print("\n选择第1行和第2行,以及第0列和第1列:")
print(df.iloc[[0, 1], [0, 1]])
#    A  B
# 0  1  4
# 1  2  5# 按位置选择所有行,但只选择特定列
print("\n选择所有行,但只选择第1列:")
print(df.iloc[:, 1])
# 0    4
# 1    5
# 2    6
# Name: B, dtype: int64
  • Series.iloc :按位置选择数据
# 创建一个 Series
s = pd.Series([1, 2, 3])
print("\n原始 Series:")
print(s)
# 0    1
# 1    2
# 2    3
# dtype: int64# 按位置选择单个元素
print("\n选择第0个位置的元素:")
print(s.iloc[0])  # 1# 按位置选择多个元素
print("\n选择第0个和第2个位置的元素:")
print(s.iloc[[0, 2]])
# 0    1
# 2    3
# dtype: int64

布尔索引

根据条件筛选数据

# 根据条件筛选数据
import pandas as pd# 创建一个 DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
filtered_df = df[df['A'] > 2]
print(filtered_df)
# dtype: int64
#    A  B
# 2  3  6

数据清洗与预处理

处理缺失值

  • DataFrame.dropna() :删除缺失值
  • DataFrame.fillna() :填充缺失值

数据类型转换

  • DataFrame.astype() :转换数据类型

重复数据处理

  • DataFrame.drop_duplicates() :删除重复数据
## 数据清洗与预处理# 删除缺失值
df.dropna(inplace=True)
# 填充缺失值
df.fillna(0, inplace=True)# 转换数据类型
df['A'] = df['A'].astype('int')
# 删除重复数据
df.drop_duplicates(inplace=True)

数据分组与聚合

 分组

  • DataFrame.groupby() :对数据进行分组

聚合

  • GroupBy.sum() :计算每组的总和
  • GroupBy.mean() :计算每组的平均值
  • GroupBy.agg() :自定义聚合函数
## 数据分组与聚合# 对数据进行分组
grouped = df.groupby('column_name')# 计算每组的总和
grouped.sum()# 计算每组的平均值
grouped.mean()# 自定义聚合函数
grouped.agg(['mean', 'sum', 'max'])

数据合并与连接

合并

  • pd.concat() :沿特定轴连接多个对象
  • DataFrame.merge() :基于共同列合并数据
## 数据合并与连接
# 合并
# 沿特定轴连接多个对象, 0行1列
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})
concatenated_df = pd.concat([df1, df2], axis=0)
print(concatenated_df)
#    A  B
# 0  1  3
# 1  2  4
# 0  5  7
# 1  6  8# 基于共同列合并数据
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [1, 2], 'C': [5, 6]})
merged_df = df1.merge(df2, on='A')
print(merged_df)
#    A  B  C
# 0  1  3  5
# 1  2  4  6

连接

  •  DataFrame.join() :按索引连接两个对象
# 连接
# 按索引连接两个对象, lsuffix和rsuffix是当列名冲突时在后添加后缀,以便区分
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'C': [5, 6], 'D': [7, 8]})
joined_df = df1.join(df2, lsuffix='_left', rsuffix='_right')
print(joined_df)

数据排序与排名

排序

  • DataFrame.sort_values() :按值排序
  • DataFrame.sort_index() :按索引排序
## 数据排序与排名# 排序
df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
sorted_df = df.sort_values('A', ascending=False)
print(sorted_df)
#    A  B
# 1  2  4
# 0  1  3# 按索引排序
sorted_df = df.sort_index()
print(sorted_df)
#    A  B
# 0  1  3
# 1  2  4

排名

  • DataFrame.rank() :对数据进行排名
# 排名
df = pd.DataFrame({'A': [2, 1, 3], 'B': [4, 6, 5]})
# 对数据进行排名
ranked_df = df.rank()
print(ranked_df)
#      A    B
# 0  2.0  1.0
# 1  1.0  3.0
# 2  3.0  2.0

数据时间序列

时间序列创建

  • pd.date_range() :创建日期范围
  •  pd.to_datetime() :将字符串转换为日期时间格式
## 数据时间序列
# 时间序列创建
# 创建日期范围
dates = pd.date_range(start='2025-07-01', end='2025-08-1')
print(dates)
# DatetimeIndex(['2025-07-01', '2025-07-02', '2025-07-03', '2025-07-04',
#                '2025-07-05', '2025-07-06', '2025-07-07', '2025-07-08',
#                '2025-07-09', '2025-07-10', '2025-07-11', '2025-07-12',
#                '2025-07-13', '2025-07-14', '2025-07-15', '2025-07-16',
#                '2025-07-17', '2025-07-18', '2025-07-19', '2025-07-20',
#                '2025-07-21', '2025-07-22', '2025-07-23', '2025-07-24',
#                '2025-07-25', '2025-07-26', '2025-07-27', '2025-07-28',
#                '2025-07-29', '2025-07-30', '2025-07-31', '2025-08-01'],
#               dtype='datetime64[ns]', freq='D')# 将字符串转换为日期时间格式
date = pd.to_datetime('2025-07-01')
print(date)  # 2025-07-01 00:00:00

时间序列操作

  • DataFrame.resample() :对时间序列数据进行重采样
  • DataFrame.shift() :将数据沿时间轴移动
# 对时间序列数据进行重采样
dates = pd.date_range(start='2025-07-01', end='2025-07-4')
df = pd.DataFrame({'value': [1, 2, 3, 4]}, index=dates)
resampled_df = df.resample('M').mean()
print(resampled_df)
#             value
# 2025-07-31    2.5# 将数据沿时间轴移动
shifted_df = df.shift(periods=1, freq='D')
print(shifted_df)
#             value
# 2025-07-02      1
# 2025-07-03      2
# 2025-07-04      3
# 2025-07-05      4

数据可视化

  • DataFrame.plot() :绘制数据图表
## 数据可视化
# 绘制数据图表
import matplotlib.pyplot as pltdf = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df.plot(kind='line', x='A', y='B')
plt.show()

 

  • Series.plot() :绘制序列图表
# 绘制序列图表
import matplotlib.pyplot as plts = pd.Series([1, 2, 3])
s.plot(kind='bar')
plt.show()

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

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

相关文章

狂命爆肝21天,共51K字的JAVA学习笔记奉上,JAVA从入门到精通一文搞定,一文在手JAVA无忧

背景知识 Java 相关概念 JavaSE (Java Standard Edition): 基础版,用于开发桌面应用程序。JavaEE (Java Enterprise Edition): 企业版,用于开发企业级应用程序。JavaME (Java Micro Edition): 微型版,用于开发嵌入式系统和移动设备应用程序…

Dijkstra 算法#图论

Dijkstra 算法 算法前提:在没有负边的情况下使用。算法思路:将结点分成已确定最短路长度的点集 S 和未确定最短路长度的点集 T,每次从 T 集合中选取最短路长度最小的结点移到 S 集合中,并对其出边执行更新操作 从T集合中&#x…

开源与闭源大模型的生态与技术对比:以百度文心4.5开源为视角

技术对比:开源与闭源大模型的优劣势 性能对比:算力效率与场景适配的博弈 在模型性能的竞技场上,开源与闭源大模型呈现出明显的差异化特征。以百度文心4.5开源系列为例,其47B参数的混合专家(MoE)模型在飞桨…

企业电商解决方案哪家好?ZKmall模块商城全渠道支持 + 定制化服务更省心

在数字化浪潮席卷各行各业的当下,企业要想拓展市场、提升竞争力,搭建专属电商平台已经成了绕不开的选择。但市场上的电商解决方案五花八门,怎么才能挑到真正适合自己的?其实道理很简单:能同时搞定全渠道支持和定制化服…

使用哪种语言的人更容易通过面试?

Ruby 和 Swift!似乎语言越大众面试通过率越低,毕竟岗位数量有限,Java 和 C 程序员所面对的竞争也会更加激烈。使用 Ruby 和 Swift 的程序员比例到底怎么样?我们可以从 Google Trends 中发现一些蛛丝马迹。最火热的 Java 的热度平均…

Axios 二次封装高级教程(含请求取消等功能)

Axios 二次封装高级教程(含请求取消等功能) 整理不易,收藏、点赞、关注哦! 一、总体架构设计 目的:构建一套功能完善、易用且健壮的 HTTP 请求封装层 核心功能: 请求拦截、响应拦截请求取消(防…

MobileNet V1的Pytorch实现并加载预训练模型进行验证

一. 环境 windonws 11RTX5060CUDA 12.8Pytorch 2.9.0dev20250630cu128torchvision 0.23.0dev20250701cu128 二. 代码 基于Mobilenet-CustomData 的Mobilenet_Pretrain.ipynb 1. 定义Mobile Net V1 import os import time import torch import torch.nn as nn import torch…

HTTP协议利用TCP的特性来实现长连接

在讨论网络协议时,经常会有人提出这样一个问题:“既然HTTP是基于TCP的,而TCP本身支持长连接,为什么HTTP不支持长连接?”这种说法其实是一种误解。实际上,HTTP确实可以并且经常使用长连接(也称为持久连接)。 什么是长连接? 首先,我们需要明确什么是“长连接”。在网…

整流电路Multisim电路仿真实验汇总——硬件工程师笔记

目录 1 整流电路基础 1.1 整流电路基本原理 1.2 整流电路的类型 1.2.1 单相整流电路 1.2.2 三相整流电路 1.3 整流电路的应用 1.3.1 直流电源 1.3.2 电池充电器 1.3.3 变频调速系统 1.34 电解和电镀 1.4 整流电路的优缺点 1.4.1 优点 1.4.2 缺点 2 二极管整流电路…

LangChain 全面入门

什么是 LangChain? LangChain 是一个专门为 大语言模型 (LLM) 应用开发设计的开源框架,帮你快速实现: • 多轮对话 • 知识库问答 (RAG) • 多工具协同调用 (function calling / tool) • 智能体 Agent 自动决策任务链 解耦 LLM 接口、Prom…

RabbitMQ 高级特性之消息确认

1. 简介 RabbitMQ 的消息发送流程: producer 将消息发送给 broker,consumer 从 broker 中获取消息并消费 那么在这里就涉及到了两种消息发送,即 producer 与 broker 之间和 consumer 与 broker 之间。 “消息确认” 讨论的是 consumer 与…

【51单片机用数码管显示流水灯的种类是按钮控制数码管加一和流水灯】2022-6-14

缘由 #include "REG52.h" unsigned char code smgduan[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0,64}; //共阴0~F消隐减号 unsigned char Js0, miao0;//中断计时 秒 分 时 毫秒 sbit k0P3^0; sbit k1P3^1; void smxs(u…

Android15 开机动画播放结束之后如何直接启动应用

问题背景 软件版本:Android15 在一些需求场景里面,需要开机动画播放结束立马去启动一个应用,下面介绍如何实现这种方案。 解决方案 首选我们需要知道开机动画播放结束之后的流程,这里会调用到wms里面,也就是一些enableScreen之类的函数,知道这个大概流程之后,再去对应…

AI实践:大模型痛点和解决方案讨论

大家好,我是星野,欢迎来到我的CSDN博客。在这个技术日新月异的时代,我们一起学习,共同进步。 今天想和大家分享的是大模型在实际应用中的痛点以及解决方案,特别是RAG(检索增强生成)技术。 大模…

Web前端工程化

Web前端工程化 前端工程化是指将软件工程的方法和原则应用到前端开发中,以提高开发效率、保证代码质量、便于团队协作和项目维护的一套体系化实践。以下是前端工程化的主要内容和实践: 核心组成部分 1. 模块化开发 JavaScript模块化:Comm…

Java 原生 HTTP Client

​介绍 Java 原生 HttpClient 是从 Java 11 开始引入的标准库,用于简化 HTTP 请求的发送与响应处理。它支持同步和异步请求,并内置对 HTTP/1.1 和 HTTP/2 协议的支持。HttpClient 提供了易用的 API 来设置请求头、请求体、处理响应以及配置 SSL/TLS 加密…

【C语言刷题】第十天:加量加餐继续,代码题训练,融会贯通IO模式

🔥个人主页:艾莉丝努力练剑 ❄专栏传送门:《C语言》、《数据结构与算法》、C语言刷题12天IO强训、LeetCode代码强化刷题 🍉学习方向:C/C方向 ⭐️人生格言:为天地立心,为生民立命,为…

【WEB】Polar靶场 6-10题 详细笔记

六.jwt 这题我又不会写 先来了解下jwt **JWT(JSON Web Token)**是一种基于JSON的开放标准(RFC 7519),主要用于在网络应用环境间传递声明信息。JWT通常用于身份验证和信息交换,确保在各方之间安全地传输信…

高阶亚马逊运营秘籍:关键词矩阵打法深度解析与应用

当竞争对手还在为单个大词竞价厮杀时,头部卖家已悄然构建了一张覆盖数千长尾关键词的隐形网络,精准触达每一个细分需求,以更低的成本撬动更高的转化率在亚马逊流量红利消退、广告成本高企的2025年,传统“爆款关键词”打法已显疲态…

【问题解决】org.springframework.web.util.NestedServletException Handler dispatch failed;

详细异常信息: org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter at org.springframework.web.servlet.DispatcherServlet.doDispatch(Disp…