pandas中的数据结构+数据查询

pandas 数据结构

Series

  • Series是一种类似于一维数组的对象,它由一组数据(不同数据类型)以及一组与之相关的数据标签(即索引)组成。

列表创建

  • 仅有数据列表即可产生最简单的Series

    s1 = pd.Series([1,'a',5.2,7])
    '''左侧为索引,右侧是数据'''
    s1"""输出如下"""
    0      1
    1      a
    2    5.2
    3      7
    dtype: object
    

    获取索引

    '''获取索引'''
    s1.index"""输出如下"""
    RangeIndex(start=0, stop=4, step=1)
    

    获取数据

    ''' 获取数据'''
    s1.values"""输出如下"""
    array([1, 'a', 5.2, 7], dtype=object)
    

创建标签索引

  • 创建一个具有标签索引的Series

    s2 = pd.Series([1, 'a', 5.2, 7], index=['d','b','a','c'])
    s2"""输出如下"""
    d      1
    b      a
    a    5.2
    c      7
    dtype: object
    

    获取索引:

    s2.index"""输出如下"""
    Index(['d', 'b', 'a', 'c'], dtype='object')
    

字典创建

  • 使用Python字典创建Series

    sdata={'Ohio':35000,'Texas':72000,'Oregon':16000,'Utah':5000}
    s3=pd.Series(sdata)
    s3"""输出如下"""
    Ohio      35000
    Texas     72000
    Oregon    16000
    Utah       5000
    dtype: int64
    

根据标签索引查询数据

  • 类似Python的字典dict

    s2"""输出如下"""
    d      1
    b      a
    a    5.2
    c      7
    dtype: object
    
    s2['a']"""输出如下"""
    5.2
    
    type(s2['a'])"""输出如下"""
    float
    
    s2[['b','a']]"""输出如下"""
    b      a
    a    5.2
    dtype: object
    
    type(s2[['b','a']])"""输出如下"""
    pandas.core.series.Series
    

DataFrame

  • DataFrame是一个表格型的数据结构

    1. 每列可以是不同的值类型(数值、字符串、布尔值等)

    2. 既有行索引index,也有列索引columns

    3. 可以被看做由Series组成的字典

    创建dataframe最常用的方法,见02节读取纯文本文件、excel、mysql数据库

多个字典创建

  • 根据多个字典序列创建dataframe

    data={'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],'year':[2000,2001,2002,2001,2002],'pop':[1.5,1.7,3.6,2.4,2.9]}
    df = pd.DataFrame(data)
    df
    

    202107131oNCq4

    每一列的数据类型

    # 每一列的数据类型
    df.dtypes"""输出如下"""
    state     object
    year       int64
    pop      float64
    dtype: object
    

    查看所有的列名

    # 查看所有的列名(特征名称、或者理解为列的索引)
    df.columns
    """输出如下"""
    Index(['state', 'year', 'pop'], dtype='object')
    

    查看行索引

    # 查看行索引
    df.index
    """输出如下"""
    RangeIndex(start=0, stop=5, step=1
    

从DataFrame中查询出Series

  • 从DataFrame中查询出Series

    1. 如果只查询一行、一列,返回的是pd.Series
    2. 如果查询多行、多列,返回的是pd.DataFrame
    df
    

    202107131oNCq4

查询多列

  • 查询多列,结果是一个pd.DataFrame

    df[['year', 'pop']]
    """输出如下"""
    

    type(df[['year', 'pop']])"""输出如下"""
    pandas.core.frame.DataFram
    

查询一行

  • 查询一行,结果是一个pd.Series

    df.loc[1]"""输出如下"""
    state    Ohio
    year     2001
    pop       1.7
    Name: 1, dtype: object  
    
    type(df.loc[1])"""输出如下"""
    pandas.core.series.Series
    

查询多行

  • 查询多行,结果是一个pd.DataFrame

    查询第2-4行

    df.loc[1:3]"""输出如下"""
    

    20210817M95b2E

    type(df.loc[1:3])"""输出如下"""
    pandas.core.frame.DataFrame
    

三、Pandas查询数据

  • Pandas查询数据的几种方法

    1. `df.loc`方法,根据行、列的标签值查询
    2. `df.iloc`方法,根据行、列的数字位置查询
    3. `df.where`方法
    4. `df.query`方法
    

    .loc既能查询,又能覆盖写入,强烈推荐!

  • Pandas使用df.loc查询数据的方法

    1. 使用单个label值查询数据
    2. 使用值列表批量查询
    3. 使用数值区间进行范围查询
    4. 使用条件表达式查询
    5. 调用函数查询
  • 注意

    1. 以上查询方法,既适用于行,也适用于列
    2. 注意观察降维dataFrame>Series>值
    print(pd.__version__)1.1.5
    

读取数据

  • 数据为北京2018年全年天气预报

    df = pd.read_csv("./datas/beijing_tianqi/beijing_tianqi_2018.csv")
    df.head()
    

    20210812O5Rokc

    设定索引为日期

    # 设定索引为日期,方便按日期筛选
    df.set_index('ymd', inplace=True)
    
    # 时间序列见后续,本次按字符串处理
    df.index"""输出如下"""
    Index(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04', '2018-01-05','2018-01-06', '2018-01-07', '2018-01-08', '2018-01-09', '2018-01-10',...'2018-12-22', '2018-12-23', '2018-12-24', '2018-12-25', '2018-12-26','2018-12-27', '2018-12-28', '2018-12-29', '2018-12-30', '2018-12-31'],dtype='object', name='ymd', length=365)
    

    替换掉温度的后缀

    # 替换掉温度的后缀℃
    df.loc[:,'bWendu'] = df['bWendu'].str.replace('℃',"").astype('int32')
    df.loc[:,'yWendu'] = df['yWendu'].str.replace('℃',"").astype('int32')df.dtypes"""输出如下"""
    bWendu        int32
    yWendu        int32
    tianqi       object
    fengxiang    object
    fengli       object
    aqi           int64
    aqiInfo      object
    aqiLevel      int64
    dtype: object
    
    df.head()
    """输出如下"""
    

    20210812CGL2RA

查询数据

单个label

  • 使用单个label值查询数据

  • ​ 行或者列,都可以只传入单个值,实现精确匹配

    得到单个值 (2018年1月3日的最高温度)

    # 得到单个值 (2018年1月3日的最高温度)
    df.loc['2018-01-03', 'bWendu']"""输出如下"""
    2
    

    得到一个Series(2018年1月3日的最高温度和最低温度)

    # 得到一个Series(2018年1月3日的最高温度和最低温度)
    df.loc['2018-01-03',['bWendu','yWendu']]"""输出如下"""
    bWendu     2
    yWendu    -5
    Name: 2018-01-03, dtype: object
    

批量查询

  • 使用值列表批量查询

    得到Series:18年1月3,4,5日的最高温度

    # 得到Series
    df.loc[['2018-01-03','2018-01-04','2018-01-05'], 'bWendu']"""输出如下"""
    ymd
    2018-01-03    2
    2018-01-04    0
    2018-01-05    3
    Name: bWendu, dtype: int32
    

    得到DataFrame:18年1月3,4,5日的最高温度和最低温度

    # 得到DataFrame
    df.loc[['2018-01-03','2018-01-04','2018-01-05'], ['bWendu', 'yWendu']]"""输出如下"""
    

    image-20210812170718191

范围查询

  • 使用数值区间进行范围查询

    注意:区间既包含开始,也包含结束

    行index按区间 (2018年1月3日至5号的最高温度和最低温度)

    # 行index按区间 (2018年1月3日至5号的最高温度和最低温度)(series)
    df.loc['2018-01-03':'2018-01-05', 'bWendu']"""输出如下"""
    ymd
    2018-01-03    2
    2018-01-04    0
    2018-01-05    3
    Name: bWendu, dtype: int32
    

    列index按区间

    # 列index按区间(series)
    df.loc['2018-01-03', 'bWendu':'fengxiang']"""输出如下"""
    bWendu        2
    yWendu       -5
    tianqi       多云
    fengxiang    北风
    Name: 2018-01-03, dtype: object
    

    行和列都按区间查询

    # 行和列都按区间查询(DataFrame)
    df.loc['2018-01-03':'2018-01-05', 'bWendu':'fengxiang']"""输出如下"""

    202108126XPzAB

使用条件表达式查询

  • bool列表的长度得等于行数或者列数
简单条件查询
  • 简单条件查询,最低温度低于-10度的列表

    df.loc[df['yWendu']<-10,:]"""输出如下"""
    

    20210812jDOl8U

    观察一下这里的boolean条件

    # 观察一下这里的boolean条件
    df['yWendu']<-10"""输出如下"""ymd
    2018-01-01    False
    2018-01-02    False
    2018-01-03    False
    2018-01-04    False
    2018-01-05    False...  
    2018-12-27     True
    2018-12-28     True
    2018-12-29     True
    2018-12-30     True
    2018-12-31    False
    Name: yWendu, Length: 365, dtype: bool
    
复杂条件查询
  • 复杂条件查询,查一下完美天气

    注意,组合条件用&符号合并,每个条件判断都得带括号

    查询最高温度小于30度,并且最低温度大于15度,并且是晴天,并且天气为优的数据

    ## 查询最高温度小于30度,并且最低温度大于15度,并且是晴天,并且天气为优的数据
    df.loc[(df['bWendu']<=30) & (df['yWendu']>15)&(df["tianqi"]=='晴') & (df["aqiLevel"]==1),:]"""输出如下"""
    

    20210812hoALwx

    再次观察这里的boolean条件

    # 再次观察这里的boolean条件
    (df['bWendu']<=30) & (df['yWendu']>15)&(df["tianqi"]=='晴') & (df["aqiLevel"]==1)"""输出如下"""
    ymd
    2018-01-01    False
    2018-01-02    False
    2018-01-03    False
    2018-01-04    False
    2018-01-05    False...  
    2018-12-27    False
    2018-12-28    False
    2018-12-29    False
    2018-12-30    False
    2018-12-31    False
    Length: 365, dtype: bool
    

调用函数查询

lambda表达式
  • 直接写lambda表达式

    # 直接写lambda表达式
    df.loc[lambda df : (df["bWendu"]<=30) & (df["yWendu"]>=15), :]"""输出如下"""
    

    20210812LyQT5B

编写函数
  • 自己编写函数

    # 编写自己的函数,查询9月份,空气质量好的数据
    def query_my_data(df):return df.index.str.startswith("2018-9") & (df["aqiLevel"]==1)df.loc[query_my_data, :]"""输出如下"""
    

    20210812JOKx3h


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

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

相关文章

使用前端 html css 和js 开发一个AI智能平台官网模板-前端静态页面项目

最近 AI 人工智能这么火&#xff0c;那必须针对AI 做一个 AI方面的 官方静态网站练手。让自己的前端技术更上一层楼&#xff0c;哈哈。 随着人工智能技术的不断发展&#xff0c;越来越多的AI应用开始渗透到各行各业&#xff0c;为不同领域的用户提供智能化解决方案。本网站致力…

React + TypeScript 数据模型驱动数据字典生成示例

React TypeScript 数据模型驱动数据字典生成示例 引言&#xff1a;数据字典的工程价值 在现代化全栈开发中&#xff0c;数据字典作为业务实体与数据存储的映射桥梁&#xff0c;直接影响系统可维护性与团队协作效率。传统手动维护字典的方式存在同步成本高和版本管理混乱两大痛…

MySQL八股整理

1. 如何定位慢查询&#xff1f; 慢查询一般发生在联表查询或者表中数据量较大时&#xff0c;当响应时间较长或者压测时间超过2s时&#xff0c;就认为是慢查询。定位慢查询的话一般有两种方法&#xff0c;一种是使用专门的分析工具去定位。另一种也是我们项目中之前使用过的方法…

ShardingSphere Proxy 配置

在使用 ShardingSphere Proxy 模式时&#xff0c;结合 主从复制架构 实现 读写分离&#xff0c;并按照 用户ID哈希算法 确定库、时间范围 确定表的场景下&#xff0c;配置文件需要做一些调整以支持分片、读写分离以及主从复制。 以下是如何配置 ShardingSphere Proxy 模式的详…

Redis集群机制及一个Redis架构演进实例

Replication&#xff08;主从复制&#xff09; Redis的replication机制允许slave从master那里通过网络传输拷贝到完整的数据备份&#xff0c;从而达到主从机制。为了实现主从复制&#xff0c;我们准备三个redis服务&#xff0c;依次命名为master&#xff0c;slave1&#xff0c;…

Qt QScrollArea 总结

Qt QScrollArea 总结 1. 功能概述 滚动容器&#xff1a;用于显示超出视口&#xff08;Viewport&#xff09;范围的内容&#xff0c;自动提供滚动条。子部件管理&#xff1a;可包裹单个子部件&#xff08;通过 setWidget()&#xff09;&#xff0c;当子部件尺寸 > 视口时&a…

Windows系统编程项目(一)进程管理器

本项目将通过MFC实现一个进程管理器&#xff0c;如下图详细信息页所示&#xff1a; 一.首先创建一个基于对话框的MFC项目&#xff0c;在静态库中使用MFC 二.在项目默认的对话框中添加一个列表 三.列表添加变量 四.初始化列表 1.设置列表风格和表头 2.填充列表内容 我们需要在…

RAG-202502

目录 RAG场景的坑知识等级金字塔 初级RAG存在的问题高级RAG索前优化检索优化检索后优化 优化经验总结参考 RAG场景的坑 晦涩的专业术语 误区&#xff1a;在专业领域中。许多文献和资料中充满了专业术语&#xff0c;这些术语对于非专业人士&#xff08;甚至是大模型&#xff0…

CDN与群联云防护的技术差异在哪?

CDN&#xff08;内容分发网络&#xff09;与群联云防护是两种常用于提升网站性能和安全的解决方案&#xff0c;但两者的核心目标和技术实现存在显著差异。本文将从防御机制、技术架构、适用场景和代码实现等方面详细对比两者的区别&#xff0c;并提供可直接运行的代码示例。 一…

STM32-智能小车项目

项目框图 ST-link接线 实物图&#xff1a; 正面&#xff1a; 反面&#xff1a; 相关内容 使用L9110S电机模块 电机驱动模块L9110S详解 | 良许嵌入式 测速模块 语音模块SU-03T 网站&#xff1a;智能公元/AI产品零代码平台 一、让小车动起来 新建文件夹智能小车项目 在里面…

【Linux】vim 设置

【Linux】vim 设置 零、起因 刚学Linux&#xff0c;有时候会重装Linux系统&#xff0c;然后默认的vi不太好用&#xff0c;需要进行一些设置&#xff0c;本文简述如何配置一个好用的vim。 壹、软件安装 sudo apt-get install vim贰、配置路径 对所有用户生效&#xff1a; …

【Python爬虫(90)】以Python爬虫为眼,洞察金融科技监管风云

【Python爬虫】专栏简介&#xff1a;本专栏是 Python 爬虫领域的集大成之作&#xff0c;共 100 章节。从 Python 基础语法、爬虫入门知识讲起&#xff0c;深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑&#xff0c;覆盖网页、图片、音频等各类数据爬取&#xff…

【java进阶】java多态深入探讨

前言 在Java的编程宇宙中,多态是极为关键的概念,它宛如一条灵动的纽带,串联起面向对象编程的诸多特性,赋予程序宛如生命般的动态活力与高度灵活性。透彻理解多态,不仅是提升代码质量的关键,更是开启高效编程大门的钥匙。 一、多态的定义与本质 多态,从概念层面来讲,…

17164字符迁移

17164字符迁移 ⭐️难度&#xff1a;中等 &#x1f4d6; &#x1f4da; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int n scanner.nextInt();int q scanner.nextInt();scanner.next…

强化学习概览

强化学习的目标 智能体&#xff08;Agent&#xff09;通过与环境&#xff08;Environment&#xff09;交互&#xff0c;学习最大化累积奖励&#xff08;Cumulative Reward&#xff09;​的策略。 数学抽象 马尔科夫决策过程&#xff08;MDP&#xff09; 收益 由于马尔科夫决…

IDEA关闭SpringBoot程序后仍然占用端口的排查与解决

IDEA关闭SpringBoot程序后仍然占用端口的排查与解决 问题描述 在使用 IntelliJ IDEA 开发 Spring Boot 应用时&#xff0c;有时即使关闭了应用&#xff0c;程序仍然占用端口&#xff08;例如&#xff1a;4001 端口&#xff09;。这会导致重新启动应用时出现端口被占用的错误&a…

QT:QPen、QBrush、与图形抗锯齿的关联

QPen QPen 是 Qt 框架中用于定义绘图时使用的画笔属性的类。在使用 QPainter 进行 2D 绘图时&#xff0c;QPen 可以控制线条的外观&#xff0c;比如线条的颜色、宽度、样式&#xff08;如实线、虚线等&#xff09;、端点样式&#xff08;如方形端点、圆形端点等&#xff09;和…

论文笔记(七十二)Reward Centering(三)

Reward Centering&#xff08;三&#xff09; 文章概括摘要3 基于值的奖励中心化4 案例研究&#xff1a; 以奖励为中心的 Q-learning5 讨论、局限性与未来工作致谢 文章概括 引用&#xff1a; article{naik2024reward,title{Reward Centering},author{Naik, Abhishek and Wan…

单例模式——c++

一个类&#xff0c;只能有1个对象 (对象在堆空间) 再次创建该对象&#xff0c;直接引用之前的对象 so构造函数不能随意调用 so构造函数私有 so对象不能构造 如何调用私有化的构造函数: 公开接口调用构造函数 调用构造函数&#xff1a;singleTon instance&#xff1b; 但…

ReentrantLock 底层实现

一、核心概念 1 - CAS CAS&#xff08;Compare-And-Swap&#xff0c;比较并交换&#xff09;操作是一种无锁的原子操作&#xff0c;它在多线程环境下能够保证线程安全&#xff0c;主要是通过硬件级别的原子性以及乐观锁的思想来实现的。以下详细介绍 CAS 操作保证线程安全的原…