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

embedded/2025/2/27 10:08:25/

pandas__0">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.ppmy.cn/embedded/167504.html

相关文章

DeepSeek 提示词:高效的提示词设计

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

java23种设计模式-中介者模式

中介者模式&#xff08;Mediator Pattern&#xff09;学习笔记 编程相关书籍分享&#xff1a;https://blog.csdn.net/weixin_47763579/article/details/145855793 DeepSeek使用技巧pdf资料分享&#xff1a;https://blog.csdn.net/weixin_47763579/article/details/145884039 1.…

快速理解Raft分布式共识算法

目录 拜占庭将军问题 Raft算法是干什么的&#xff1f; 一、领导选举&#xff08;选老板&#xff09; 二、日志复制&#xff08;发通知&#xff09; 三、安全性&#xff08;防篡改&#xff09; &#x1f330; 举个真实例子 ✔️ Raft的优势 基础 状态机 节点类型 任期…

Imagination 最新的D系列GPU IP 为智能手机和其他电力受限设备上图形和计算工作负载的高效加速设定了新的标准

今日&#xff0c;Imagination Technologies&#xff08;“Imagination”&#xff09;宣布推出其最新的GPU IP——Imagination DXTP&#xff0c;该产品为智能手机和其他电力受限设备上图形和计算工作负载的高效加速设定了新的标准。得益于一系列微架构改进&#xff0c;DXTP在常见…

人工智能丨大语言模型不再高不可攀!DeepSeek开源FlashMLA,开启AI新纪元

在人工智能技术飞速发展的今天&#xff0c;DeepSeek宣布开源其核心大语言模型框架——FlashMLA&#xff0c;这一举动引发了业界的广泛关注。那么&#xff0c;DeepSeek开源FlashMLA&#xff0c;究竟意味着什么&#xff1f;这不仅是一次技术上的开放&#xff0c;更是对行业生态、…

mysql有索引但是查询没有使用索引是什么问题

关键原因分析 索引选择性问题 如果 order_id 没有索引&#xff0c;即使 insert_time 有索引&#xff0c;优化器可能认为先通过 order_id 过滤数据更高效。但由于 order_id 无索引&#xff0c;只能全表扫描后过滤。即使 insert_time 有索引&#xff0c;如果满足 insert_time >…

530 Login fail. A secure connection is requiered(such as ssl)-java发送QQ邮箱(简单配置)

由于cs的csdN许多文章关于这方面的都是vip文章&#xff0c;而本文是免费的&#xff0c;希望广大网友觉得有帮助的可以多点赞和关注&#xff01; QQ邮箱授权码到这里去开启 授权码是16位的字母&#xff0c;填入下面的mail.setting里面的pass里面 # 邮件服务器的SMTP地址 host…

MSSQL2022的一个错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.16.0”提供程序

MSSQL2022导入Excel的一个错误&#xff1a;未在本地计算机上注册“Microsoft.ACE.OLEDB.16.0”提供程序 一、导入情况二、问题发现三、问题解决 最近在安装新版SQLServer SSMS 2022后&#xff0c;每次导入Excel都会出现错误提示&#xff1a;未在本地计算机上注册“Microsoft.…