爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      Pandas之:深入理解Pandas的数据结构

      首页 知识中心 数据库 文章详情页

      Pandas之:深入理解Pandas的数据结构

      2023-03-22 09:34:26 阅读次数:537

      数据结构,Pandas

      文章目录

      • 简介
      • Series
        • 从**ndarray**创建
        • 从dict创建
        • 从标量创建
        • Series 和 ndarray
        • Series和dict
        • 矢量化操作和标签对齐
        • Name属性
      • **DataFrame**
        • 从Series创建
        • 从ndarrays 和 lists创建
        • 从结构化数组创建
        • 从字典list创建
        • 从元组中创建
        • 列选择,添加和删除

       

      简介

      本文将会讲解Pandas中基本的数据类型Series和DataFrame,并详细讲解这两种类型的创建,索引等基本行为。

      使用Pandas需要引用下面的lib:

      In [1]: import numpy as np
      
      In [2]: import pandas as pd
      
      Series

      Series是一维带label和index的数组。我们使用下面的方法来创建一个Series:

      >>> s = pd.Series(data, index=index)
      

      这里的data可以是Python的字典,np的ndarray,或者一个标量。

      index是一个横轴label的list。接下来我们分别来看下怎么创建Series。

      从ndarray创建

      s = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])
      
      s
      Out[67]: 
      a   -1.300797
      b   -2.044172
      c   -1.170739
      d   -0.445290
      e    1.208784
      dtype: float64
      

      使用index获取index:

      s.index
      Out[68]: Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
      

      从dict创建

      d = {'b': 1, 'a': 0, 'c': 2}
      
      pd.Series(d)
      Out[70]: 
      a    0
      b    1
      c    2
      dtype: int64
      

      从标量创建

      pd.Series(5., index=['a', 'b', 'c', 'd', 'e'])
      Out[71]: 
      a    5.0
      b    5.0
      c    5.0
      d    5.0
      e    5.0
      dtype: float64
      

      Series 和 ndarray

      Series和ndarray是很类似的,在Series中使用index数值表现的就像ndarray:

      s[0]
      Out[72]: -1.3007972194268396
      
      s[:3]
      Out[73]: 
      a   -1.300797
      b   -2.044172
      c   -1.170739
      dtype: float64
      
      s[s > s.median()]
      Out[74]: 
      d   -0.445290
      e    1.208784
      dtype: float64
      
      s[[4, 3, 1]]
      Out[75]: 
      e    1.208784
      d   -0.445290
      b   -2.044172
      dtype: float64
      

      Series和dict

      如果使用label来访问Series,那么它的表现就和dict很像:

      s['a']
      Out[80]: -1.3007972194268396
      
      s['e'] = 12.
      
      s
      Out[82]: 
      a    -1.300797
      b    -2.044172
      c    -1.170739
      d    -0.445290
      e    12.000000
      dtype: float64
      

      矢量化操作和标签对齐

      Series可以使用更加简单的矢量化操作:

      s + s
      Out[83]: 
      a    -2.601594
      b    -4.088344
      c    -2.341477
      d    -0.890581
      e    24.000000
      dtype: float64
      
      s * 2
      Out[84]: 
      a    -2.601594
      b    -4.088344
      c    -2.341477
      d    -0.890581
      e    24.000000
      dtype: float64
      
      np.exp(s)
      Out[85]: 
      a         0.272315
      b         0.129487
      c         0.310138
      d         0.640638
      e    162754.791419
      dtype: float64
      

      Name属性

      Series还有一个name属性,我们可以在创建的时候进行设置:

      s = pd.Series(np.random.randn(5), name='something')
      
      s
      Out[88]: 
      0    0.192272
      1    0.110410
      2    1.442358
      3   -0.375792
      4    1.228111
      Name: something, dtype: float64
      

      s还有一个rename方法,可以重命名s:

      s2 = s.rename("different")
      
      DataFrame

      DataFrame是一个二维的带label的数据结构,它是由Series组成的,你可以把DataFrame看成是一个excel表格。DataFrame可以由下面几种数据来创建:

      • 一维的ndarrays, lists, dicts, 或者 Series
      • 结构化数组创建
      • 2维的numpy.ndarray
      • 其他的DataFrame

      从Series创建

      可以从Series构成的字典中来创建DataFrame:

      d = {'one': pd.Series([1., 2., 3.], index=['a', 'b', 'c']),'two': pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
      
      df = pd.DataFrame(d)
      
      df
      Out[92]: 
         one  two
      a  1.0  1.0
      b  2.0  2.0
      c  3.0  3.0
      d  NaN  4.0
      

      进行index重排:

      pd.DataFrame(d, index=['d', 'b', 'a'])
      Out[93]: 
         one  two
      d  NaN  4.0
      b  2.0  2.0
      a  1.0  1.0
      

      进行列重排:

      pd.DataFrame(d, index=['d', 'b', 'a'], columns=['two', 'three'])
      Out[94]: 
         two three
      d  4.0   NaN
      b  2.0   NaN
      a  1.0   NaN
      

      从ndarrays 和 lists创建

      d = {'one': [1., 2., 3., 4.],'two': [4., 3., 2., 1.]}
      
      pd.DataFrame(d)
      Out[96]: 
         one  two
      0  1.0  4.0
      1  2.0  3.0
      2  3.0  2.0
      3  4.0  1.0
      
      pd.DataFrame(d, index=['a', 'b', 'c', 'd'])
      Out[97]: 
         one  two
      a  1.0  4.0
      b  2.0  3.0
      c  3.0  2.0
      d  4.0  1.0
      

      从结构化数组创建

      可以从结构化数组中创建DF:

      In [47]: data = np.zeros((2, ), dtype=[('A', 'i4'), ('B', 'f4'), ('C', 'a10')])
      
      In [48]: data[:] = [(1, 2., 'Hello'), (2, 3., "World")]
      
      In [49]: pd.DataFrame(data)
      Out[49]: 
         A    B         C
      0  1  2.0  b'Hello'
      1  2  3.0  b'World'
      
      In [50]: pd.DataFrame(data, index=['first', 'second'])
      Out[50]: 
              A    B         C
      first   1  2.0  b'Hello'
      second  2  3.0  b'World'
      
      In [51]: pd.DataFrame(data, columns=['C', 'A', 'B'])
      Out[51]: 
                C  A    B
      0  b'Hello'  1  2.0
      1  b'World'  2  3.0
      

      从字典list创建

      In [52]: data2 = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
      
      In [53]: pd.DataFrame(data2)
      Out[53]: 
         a   b     c
      0  1   2   NaN
      1  5  10  20.0
      
      In [54]: pd.DataFrame(data2, index=['first', 'second'])
      Out[54]: 
              a   b     c
      first   1   2   NaN
      second  5  10  20.0
      
      In [55]: pd.DataFrame(data2, columns=['a', 'b'])
      Out[55]: 
         a   b
      0  1   2
      1  5  10
      

      从元组中创建

      可以从元组中创建更加复杂的DF:

      In [56]: pd.DataFrame({('a', 'b'): {('A', 'B'): 1, ('A', 'C'): 2},
         ....:               ('a', 'a'): {('A', 'C'): 3, ('A', 'B'): 4},
         ....:               ('a', 'c'): {('A', 'B'): 5, ('A', 'C'): 6},
         ....:               ('b', 'a'): {('A', 'C'): 7, ('A', 'B'): 8},
         ....:               ('b', 'b'): {('A', 'D'): 9, ('A', 'B'): 10}})
         ....: 
      Out[56]: 
             a              b      
             b    a    c    a     b
      A B  1.0  4.0  5.0  8.0  10.0
        C  2.0  3.0  6.0  7.0   NaN
        D  NaN  NaN  NaN  NaN   9.0
      

      列选择,添加和删除

      可以像操作Series一样操作DF:

      In [64]: df['one']
      Out[64]: 
      a    1.0
      b    2.0
      c    3.0
      d    NaN
      Name: one, dtype: float64
      
      In [65]: df['three'] = df['one'] * df['two']
      
      In [66]: df['flag'] = df['one'] > 2
      
      In [67]: df
      Out[67]: 
         one  two  three   flag
      a  1.0  1.0    1.0  False
      b  2.0  2.0    4.0  False
      c  3.0  3.0    9.0   True
      d  NaN  4.0    NaN  False
      

      可以删除特定的列,或者pop操作:

      In [68]: del df['two']
      
      In [69]: three = df.pop('three')
      
      In [70]: df
      Out[70]: 
         one   flag
      a  1.0  False
      b  2.0  False
      c  3.0   True
      d  NaN  False
      

      如果插入常量,那么会填满整个列:

      In [71]: df['foo'] = 'bar'
      
      In [72]: df
      Out[72]: 
         one   flag  foo
      a  1.0  False  bar
      b  2.0  False  bar
      c  3.0   True  bar
      d  NaN  False  bar
      

      默认会插入到DF中最后一列,可以使用insert来指定插入到特定的列:

      In [75]: df.insert(1, 'bar', df['one'])
      
      In [76]: df
      Out[76]: 
         one  bar   flag  foo  one_trunc
      a  1.0  1.0  False  bar        1.0
      b  2.0  2.0  False  bar        2.0
      c  3.0  3.0   True  bar        NaN
      d  NaN  NaN  False  bar        NaN
      

      使用assign 可以从现有的列中衍生出新的列:

      In [77]: iris = pd.read_csv('data/iris.data')
      
      In [78]: iris.head()
      Out[78]: 
         SepalLength  SepalWidth  PetalLength  PetalWidth         Name
      0          5.1         3.5          1.4         0.2  Iris-setosa
      1          4.9         3.0          1.4         0.2  Iris-setosa
      2          4.7         3.2          1.3         0.2  Iris-setosa
      3          4.6         3.1          1.5         0.2  Iris-setosa
      4          5.0         3.6          1.4         0.2  Iris-setosa
      
      In [79]: (iris.assign(sepal_ratio=iris['SepalWidth'] / iris['SepalLength'])
         ....:      .head())
         ....: 
      Out[79]: 
         SepalLength  SepalWidth  PetalLength  PetalWidth         Name  sepal_ratio
      0          5.1         3.5          1.4         0.2  Iris-setosa     0.686275
      1          4.9         3.0          1.4         0.2  Iris-setosa     0.612245
      2          4.7         3.2          1.3         0.2  Iris-setosa     0.680851
      3          4.6         3.1          1.5         0.2  Iris-setosa     0.673913
      4          5.0         3.6          1.4         0.2  Iris-setosa     0.720000
      

      注意, assign 会创建一个新的DF,原DF保持不变。

      下面用一张表来表示DF中的index和选择:

      操作 语法 返回结果
      选择列 df[col] Series
      通过label选择行 df.loc[label] Series
      通过数组选择行 df.iloc[loc] Series
      行的切片 df[5:10] DataFrame
      使用boolean向量选择行 df[bool_vec] DataFrame

       

      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/flydean/3035385,作者:程序那些事,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:Django(16)-ORM基础字段及选项

      下一篇:MySQL使用什么作为主键比较好

      相关文章

      2025-05-19 09:04:14

      《剑指Offer》按之字形顺序打印二叉树——最容易理解的思路,两分钟学会~

      《剑指Offer》按之字形顺序打印二叉树——最容易理解的思路,两分钟学会~

      2025-05-19 09:04:14
      二叉树 , 数据结构
      2025-05-19 09:04:14

      《剑指Offer》二叉搜索树的第k个节点——真没你想象中那么难,一招教你秒杀它~

      《剑指Offer》二叉搜索树的第k个节点——真没你想象中那么难,一招教你秒杀它~

      2025-05-19 09:04:14
      二叉树 , 数据结构
      2025-05-19 09:04:14

      【牛客网+LeetCode】链表 OJ强训题——高效解法

      【牛客网+LeetCode】链表 OJ强训题——高效解法

      2025-05-19 09:04:14
      数据结构 , 链表
      2025-05-09 08:20:32

      MySQL——索引(概述和结构介绍)

      索引(index)是帮助 MySQL 高效获取数据的数据结构(是一种有序的数据结构)。

      2025-05-09 08:20:32
      Tree , 存储 , 引擎 , 数据结构 , 查询 , 索引 , 结构
      2025-05-07 09:10:01

      DS初阶:顺序表的实现

      DS初阶:顺序表的实现

      2025-05-07 09:10:01
      函数 , 指针 , 数据 , 数据结构 , 数组 , 空间 , 顺序
      2025-04-18 07:11:40

      Java数据结构之《最短路径》

      Java数据结构之《最短路径》

      2025-04-18 07:11:40
      代码 , 数据结构 , 样例 , 路径 , 输入 , 输出 , 顶点
      2025-04-15 09:19:55

      Redis经典问题:BigKey问题

      在Redis中,每个Key都会对应一个Value,而这个Value的大小会影响Redis的性能表现。当我们存储的Value特别大时,就会出现BigKey问题。

      2025-04-15 09:19:55
      Key , Redis , 数据结构 , 系统 , 缓存 , 问题
      2025-04-15 09:19:45

      文心一言 VS 讯飞星火 VS chatgpt (263)-- 算法导论20.1 2题

      在Go语言中,为了支持带有卫星数据的关键字,我们可以定义一个结构体(struct)来表示这个关键字,其中可以包含一个字段用于存储关键字本身,以及另一个字段用于存储与该关键字相关联的卫星数据。

      2025-04-15 09:19:45
      关键字 , 存储 , 数据 , 数据结构
      2025-04-15 09:19:45

      文心一言 VS 讯飞星火 VS chatgpt (262)-- 算法导论20.1 1题

      在Go语言中,如果你想要一个数据结构支持重复的关键字(或键),你不能简单地使用内建的map,因为map在Go中是基于键的唯一性设计的。

      2025-04-15 09:19:45
      map , 关键字 , 数据结构 , 示例 , 重复
      2025-04-14 09:26:51

      线性表练习之Example038-编写一个函数将链表 h2 链接到链表 h1 之后,要求链接后的链表仍然保持循环链表形式

      线性表练习之Example038-编写一个函数将链表 h2 链接到链表 h1 之后,要求链接后的链表仍然保持循环链表形式

      2025-04-14 09:26:51
      java , 数据结构
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5248343

      查看更多

      最新文章

      【牛客网+LeetCode】链表 OJ强训题——高效解法

      2025-05-19 09:04:14

      《剑指Offer》按之字形顺序打印二叉树——最容易理解的思路,两分钟学会~

      2025-05-19 09:04:14

      《剑指Offer》二叉搜索树的第k个节点——真没你想象中那么难,一招教你秒杀它~

      2025-05-19 09:04:14

      DS初阶:顺序表的实现

      2025-05-07 09:10:01

      文心一言 VS 讯飞星火 VS chatgpt (262)-- 算法导论20.1 1题

      2025-04-15 09:19:45

      STL详解(九)—— priority_queue的使用与模拟实现

      2025-04-14 09:26:51

      查看更多

      热门文章

      数据结构入门(第一天)

      2023-02-24 09:05:57

      Pandas数据结构

      2023-05-29 10:43:59

      数据结构这进制转换

      2023-05-31 08:43:33

      【算法】双指针、位运算、离散化、合并区间

      2023-07-26 08:09:55

      【数据结构与算法】带头双向循环链表

      2023-07-26 08:11:49

      Collection工具类基本使用

      2023-07-25 08:20:01

      查看更多

      热门标签

      数据库 mysql 字符串 数据结构 MySQL 算法 redis oracle java sql python 数据 索引 SQL 查询
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      给定一个数组arr,长度为N,arr中所有的值都在1~K范围上, 你可以删除数字,目的是让arr的最长递增子序列长度小于K。 返回至少删除几个数字能达到目的。

      考研数据结构之队列(3.2)——链队的操作(C表示)

      Range模块是跟踪数字范围的模块。 设计一个数据结构来跟踪表示为 半开区间 的范围并查询它们。

      每日一题-69. x 的平方根

      数据结构之python实现顺序表

      【数据结构】单链表

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号