Pandas的学习(3.DataFrame的创建方法和三种索引方法(iloc、loc、values)以及切片)

2023-11-18

DataFrame

   DataFrame是一个【表格型】的数据结构,可以看做是【由Series组成的字典】共用同一个索引)。DataFrame由按一定顺序排列的多列数据组成,设计初衷是将Series的使用场景从一维拓展到多维DataFrame既有行索引,也有列索引、

  --- 行索引:  index

 --- 列索引: columns

--- 值:  values(numpy的二维数组)

 DataFrame的创建

  1.   最常用的方法是传递一个字典来创建。

     DataFrame以字典的键作为每一【列】的名称,以字典的值(一个数组)作为每一列。
     此外,DataFrame会自动加上每一行的索引(和Series一样)。
    同Series一样,若传入的列与字典的键不匹配,则相应的值为NaN。

from pandas import DataFrame
import numpy as np

'''通过字典进行创建'''
dic = {
    "height": [175, 180, 169, 177],
    "age": np.random.randint(18, 25, size=4),
    "sex": ['女', '男', '女', '男']
}
"""
    DataFrame(data=None, index=None, columns=None, dtype=None,copy=False)
    参数解释:  data: 为创建数据的字典   
              index : 不赋值的时,行索引就是从0开始的整数
                      赋值给一个列表,列表的元素即为行索引
              columns : 不赋值时,列名就是字典中键
                      赋值给一个列表,列名就是列表中的元素,
                      如果元素比字典的键多的话,这一列的就为NaN
                      
              
"""
# columns中如果元素比字典的键多的话,这一列的就为NaN
df = DataFrame(dic, index=list('ABCD'), columns=['height', 'age', 'sex', 'weight'])
print(df)
"""
   height  age sex weight
A     175   18   女    NaN
B     180   20   男    NaN
C     169   19   女    NaN
D     177   23   男    NaN
"""

2. 打印DataFrame的形状   .shape

# 打印DataFrame的形状
print(df.shape)
"""
(4, 4)
"""

3.给DataFramed的行索引重新赋值  .index

# 重新给DataFrame的行索引赋值
df.index = [1, 2, 3, 4]
print(df)
"""
   height  age sex weight
1     175   22   女    NaN
2     180   23   男    NaN
3     169   22   女    NaN
4     177   21   男    NaN
"""

4. 修改DataFrame的列名(给DataFrame的列名重新赋值)

# 修改DataFrame的列名
df.columns = [0, 2, 4, 6]
print(df)
"""
     0   2  4    6
1  175  24  女  NaN
2  180  23  男  NaN
3  169  21  女  NaN
4  177  22  男  NaN
"""

 

 DataFrame的索引

1.对列进行索引

     - 通过类似字典的方式

      - 通过属性的方式

  可以将DataFrame的列获取为一个Series。返回的Series拥有原DataFrame相同的索引,且name属性也已经设置好了,就是相应的列名。

# 通过字典的形式进行检索   【检索列返回值,是Series类型】
print(df['age'])
"""
A    20
B    20
C    18
D    22
Name: age, dtype: int3
"""
# 通过属性的方式进行检索
# 对于DataFrame而言,列名就相当于属性
# DataFrame 是统计数据时,用的表格,某一个事物属性,每一个属性对应的DataFran中的列名
print(df.age)
"""
A    21
B    22
C    18
D    21
Name: age, dtype: int32
"""

2.对行进行索引
    -- 使用.ix[]来进行行索引   (过时)
    -- 使用.loc[]加index来进行行索引

    -- 使用.iloc[]加整数来进行行索引

     同样返回一个Series,index为原来的

# 行索引
'''显示索引'''
# 对于行的检索,返回值也为Series
print(df.loc['A'])
"""
Name: age, dtype: int32
height    175
age        19
sex         女
weight     55
Name: A, dtype: object
"""

# 中括号括起来,代表的是条件, 即检索多行,返回的数据就是DataFrame
print(df.loc[['A', 'B']])
"""
   height  age sex  weight
A     175   24   女      55
B     180   21   男      78
"""

'''
    对于切片而言没有列切片(因为列是属性 )
'''
# 可以进行切片索引,左闭右闭
print(df.loc['A':'C'])
"""
   height  age sex  weight
A     175   21   女      55
B     180   20   男      78
C     169   19   女      71
"""

'''隐式索引(左闭右开)'''
# DataFrame自身有Bug,索引是汉字,有时无法检索结果
print(df.iloc[1:3])
"""
   height  age sex  weight
B     180   18   男      78
C     169   19   女      71
"""

3.对元素索引的方法  (查询到具体的数据)

  -- 使用列索引

  -- 使用行索引   (iloc[3,1]) 相当于两个参数; iloc[[3,3]] 里面的[3,3] 看做一个参数

  -- 使用values属性 (二维numpy数组) 

'''对元素进行索引'''
# 查询到具体额数据
# 找到 列名为sex的,行索引为B的数据
print(df['sex']['B'])  # 男
# 可以直接修改具体的值 (再进行修改值的时候,会抛出一个警告,让我们去copy一份,
# 根据具体的情况可以忽略,程序是可以正常执行的)
df['sex']['B'] = '女博士'
print(df)
"""
   height  age  sex  weight
A     175   22    女      55
B     180   20  女博士      78
C     169   18    女      71
D     177   23    男      98
"""

'''使用loc取出具体的元素'''
# 检索行的时候,参数可以多个,但是列,无法完成这样的操作
print(df.loc['C']['height'])  # 169
print(df.loc['C', 'height'])  # 169

'''可以使用values取出某个数据'''
# 使用values取出第一行的第三个(从0开始,左闭右闭)
print(df.values[0,2])     # 55

【注意】 直接用中括号时:
             ---索引表示的是列索引
             ----切片表示的是行切片

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas的学习(3.DataFrame的创建方法和三种索引方法(iloc、loc、values)以及切片) 的相关文章

随机推荐

  • Obsidian学习从0到1 —— MARKDOWN

    文章目录 1 认识markdown 2 使用markdown 常用语法 1 标题 2 加粗 斜体 删除线 3 列表 4 分级 5 引用 6 分割线 7 链接 8 代码块 9 任务列表 快捷方式 10 插入图像 11 表格支持 高级用法 1
  • 【STM32】入门(十三):FreeRTOS

    STM32 STM32单片机总目录 1 FreeRTOS简述 完全免费 FreeRTOS是完全免费的实时操作系统 源码简单 只需 3 个 RTOS 移植通用的源文件和 1 个微控制器专用的源文件 镜像较小 具有最小 ROM RAM 和处理开
  • 集简云上线ChatGPT文档问答,基于文档实现智能问答训练

    过去 我们想要让ChatGPT结合自身业务进行针对性回答 只能通过输入大量的prompt提示 或使用官方原生Fine Tuning模型训练 然而 过多的prompt提示词一方面提高了使用成本 另一方面 提示词的信息量有限 无法复用于不同的问
  • Permutation 和 Combination

    文章目录 Permutation 代码 代码核心思路 Combination 代码 代码核心思路 总结 Permutation 和 Combination是算法中非常常见的两种数据的排列方式 也就是数学中的排列和组合 Permutation
  • java代码编写规范,讲的太透彻了

    什么是ACID 事务的定义和实现一直随着数据管理的发展在演进 当计算机越来越强大 它们就能够被用来管理越来越多数据 最终 多个用户可以在一台计算机上共享数据 这就导致了一个问题 当一个用户修改了数据而另外一个还在使用旧数据进行计算过程中 这
  • 符号“∑”的用法

    和 分别用来表示求和与求积 Sigma X 将X中的值全部相加 XF XF X表示的是产量 这个没有错 F表示有同样产量X的人数 数学上称为频数 就是英语的Frequency XF的意思 不是人均产量 人数 而是产量X 产量为X的人数 例如
  • EJBCA操作说明(二)java操作

    ejbca web界面操作 代码下载地址 初始化获得EJBCA实例 初始化EjbcaWS 获得EJBCA服务端Webservice实例 return public static EjbcaWS init EjbcaWS ejbcaWS nu
  • 单元测试 实体

    单元测试 实体 代码 Before public void setUp userVoTest new UserVo Test public void testEquals final boolean result userVoTest eq
  • C语言编译遇到的错误提示总结

    C语言编译遇到的错误提示总结 error1 expected asm or attribute before token error1 expected asm or attribute before token 解决方案 很有可能是你定义
  • Java常见面试题

    1 进程和线程的区别 1 进程是内存中运行的程序 是操作系统资源分配的基本单元 在windows操作系统中运行的每一个exe文件就是一个进程 每个进程都有独立的代码和数据空间 程序上下文 所以程序之间切换开销比较大 2 线程是处理器任务调度
  • stm32f407 bootloader程序制作 bootloader(基于rtthread3.3.0 sfud easyflash等库) 升级APP(基于rtthread的app)

    本位将介绍stm32f407vgt6 芯片制作bootloader程序 用作app的远程升级 一 硬件介绍 stm32f407vgt6 主频 166MHZ flash 1M SRAM 192K stm32f407vgt6 使用的phy芯片为
  • 微信小程序顶部栏图片随页面滚动渐变展示隐藏

    微信小程序顶部栏图片随页面滚动渐变展示隐藏 小程序顶部通栏 展示图片 随着页面滚动 开始渐变展标题记及纯色吸顶样式 主要使用了小程序中的scroll view组件 通过滚动时触发 bindscroll和滚动到顶部 bindscrolltou
  • LeetCode 67. 二进制求和

    题目链接 https leetcode cn problems add binary 思路如下 高精度加法 从低位到高位逐个对应相加 C 代码如下 class Solution public string addBinary string
  • 登录安全

    1 前端将用户名和密码rsa加密 后端解密 2 为防止登录数据被拦截而被复制登录 登录数据添加当前时间戳或加密后唯一字段 后端每一次登录成功后将时间戳或唯一字段加工后作为一个redis键名保存 值随便 缓存时间和登录有效时间一致 以保证登录
  • 【NLP】大模型综述来了!一文带你理清全球AI巨头的大模型进化史

    夕小瑶科技说 原创 作者 小戏 Python 如果自己是一个大模型的小白 第一眼看到 GPT PaLm LLaMA 这些单词的怪异组合会作何感想 假如再往深里入门 又看到 BERT BART RoBERTa ELMo 这些奇奇怪怪的词一个接
  • 三局两胜制下获得首胜后最后获胜的概率

    之前看NBA的时候 说拿下天王山之战的战队有83 3 差不多这个值 的概率拿下最后的胜利 当时感觉很奇怪 为什么这么接近5 6而不是3 4呢 然后自己算了一下 还真是 先说下为什么不是3 4的原因 3 4很容易算出来 1 2 1 2 可是后
  • 如何利用阿里云服务器快照策略为数据备份

    阿里云服务器快照 是一个很好的备份容灾工具 不了解的可以先了解一下 快照可以做什么 这是一种便捷高效的数据保护服务手段 可以对重要业务数据进行备份 来应对误操作 攻击 病毒等导致的数据丢失风险 比如前段时间的勒索病毒事件 假设你中招后所有数
  • Django下载图片接口

    import logging from django http import HttpResponse FileResponse from io import BytesIO from urllib parse import quote c
  • 还是得从代码角度看yolov5(1)

    train 参考文章 又是经典写到一半发现别人写的更好 基础函数 1 setattr setattr opt k v 将给定对象上的命名属性设置为指定值 等价于opt k v 2 getattr callback getattr logge
  • Pandas的学习(3.DataFrame的创建方法和三种索引方法(iloc、loc、values)以及切片)

    DataFrame DataFrame是一个 表格型 的数据结构 可以看做是 由Series组成的字典 共用同一个索引 DataFrame由按一定顺序排列的多列数据组成 设计初衷是将Series的使用场景从一维拓展到多维 DataFrame