pd.DataFrame()函数解析

2023-10-31

文章目录

DataFrame是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表

0 简介

DataFrame的单元格可以存放数值、字符串等,这和excel表很像,同时DataFrame可以设置列名columns与行名index。

1 创建DataFrame

pandas常与numpy一起配合使用,所以通常会一起引用,也就是:

  1. import pandas as pd
  2. import numpy as np

1.1 使用numpy函数创建

可以直接通过pandas的DataFrame函数进行创建。

  1. import pandas as pd
  2. import numpy as np
  3. df1 = pd.DataFrame(np.random.randn(3, 3), index=list('abc'), columns=list('ABC'))
  4. print(df1)
  5. #           A         B         C
  6. # a -0.612978  0.237191  0.312969
  7. # b -1.281485  1.135944  0.162456
  8. # c  2.232905  0.200209  0.028671

其中第一个参数是存放在DataFrame里的数据,第二个参数index就是之前说的行名,第三个参数columns是之前说的列名。

其中后两个参数可以使用list输入,但是注意,这个list的长度要和DataFrame的大小匹配,不然会报错。

  1. df2 = pd.DataFrame(np.random.randn(3, 3), index=list('abcd'), columns=list('ABCD'))
     
  2. # ValueError: Shape of passed values is (3, 3), indices imply (4, 4)

当然,这两个参数是可选的,你可以选择不设置,而且这两个list是可以一样的

  1. df3 = pd.DataFrame(np.random.randn(3, 3), index=list('ABC'), columns=list('ABC'))
  2. #           A         B         C
  3. # A  1.106838  0.309086  0.748472
  4. # B  0.439228 -0.213154 -1.438647
  5. # C  0.292450  0.841237 -0.069207

1.2 直接创建

  1. import pandas as pd
  2. import numpy as np
  3. df4 = pd.DataFrame([[1, 2, 3], 
  4.                     [2, 3, 4],
  5.                     [3, 4, 5]],
  6.                    index=list('abc'), columns=list('ABC'))
  7. print(df4)
  8. #    A  B  C
  9. # a  1  2  3
  10. # b  2  3  4
  11. # c  3  4  5

1.3 使用字典创建

  1. import pandas as pd
  2. import numpy as np
  3. dic1 = {
  4.     'name': [
  5.         '张三', '李四', '王二麻子', '小淘气'], 'age': [
  6.             37, 30, 50, 16], 'gender': [
  7.                 '男', '男', '男', '女']}
  8. df5 = pd.DataFrame(dic1)
  9. print(df5)
  10. #    age gender  name
  11. # 0   37      男    张三
  12. # 1   30      男    李四
  13. # 2   50      男  王二麻子
  14. # 3   16      女   小淘气

2 DataFrame属性

2.1 查看列的数据类型

  1. print(df5.dtypes)
  2. # age        int64
  3. # gender    object
  4. # name      object
  5. # dtype: object

2.2 查看DataFrame的头尾

  1. import pandas as pd
  2. import numpy as np
  3. df6 = pd.DataFrame(np.arange(36).reshape(6, 6), index=list('abcdef'), columns=list('ABCDEF'))
  4. print(df6)
  5. #     A   B   C   D   E   F
  6. # a   0   1   2   3   4   5
  7. # b   6   7   8   9  10  11
  8. # c  12  13  14  15  16  17
  9. # d  18  19  20  21  22  23
  10. # e  24  25  26  27  28  29
  11. # f  30  31  32  33  34  35
  12. print(df6.head())
  13. #     A   B   C   D   E   F
  14. # a   0   1   2   3   4   5
  15. # b   6   7   8   9  10  11
  16. # c  12  13  14  15  16  17
  17. # d  18  19  20  21  22  23
  18. # e  24  25  26  27  28  29

比如只看前2行

  1. print(df6.head(2))
  2. #    A  B  C  D   E   F
  3. # a  0  1  2  3   4   5
  4. # b  6  7  8  9  10  11

比如看后5行。

  1. print(df6.tail())
  2. #     A   B   C   D   E   F
  3. # b   6   7   8   9  10  11
  4. # c  12  13  14  15  16  17
  5. # d  18  19  20  21  22  23
  6. # e  24  25  26  27  28  29
  7. # f  30  31  32  33  34  35

比如只看后2行。

  1. print(df6.tail(2))
  2. #     A   B   C   D   E   F
  3. # e  24  25  26  27  28  29
  4. # f  30  31  32  33  34  35

2.3 查看行名与列名

使用index查看行名,columns查看列名

  1. print(df6.index)
  2. print(df6.columns)
  3. # Index(['a', 'b', 'c', 'd', 'e', 'f'], dtype='object')
  4. # Index(['A', 'B', 'C', 'D', 'E', 'F'], dtype='object')

2.4 查看数据值

使用values可以查看DataFrame里的数据值,返回的是一个数组。

  1. print(df6.values)
  2. # [[ 0  1  2  3  4  5]
  3. #  [ 6  7  8  9 10 11]
  4. #  [12 13 14 15 16 17]
  5. #  [18 19 20 21 22 23]
  6. #  [24 25 26 27 28 29]
  7. #  [30 31 32 33 34 35]]

比如说查看某一列所有的数据值。

  1. print(df6['B'].values)
  2. [ 1  7 13 19 25 31]

查看某一行所有的数据值

  1. print(df6.iloc[0])
  2. # A    0
  3. # B    1
  4. # C    2
  5. # D    3
  6. # E    4
  7. # F    5
  8. # Name: a, dtype: int32

2.5 查看行列数

  1. print(df6.shape[0])
  2. print(df6.shape[1])
  3. # 6
  4. # 6

2.6 切片

  1. print(df6['a':'b'])
  2. #    A  B  C  D   E   F
  3. # a  0  1  2  3   4   5
  4. # b  6  7  8  9  10  11

2.7 索引

  1. print(df6.loc[:,'A':'B'])
  2. #     A   B
  3. # a   0   1
  4. # b   6   7
  5. # c  12  13
  6. # d  18  19
  7. # e  24  25
  8. # f  30  31
  • 切片表示的是行切片
  • 索引表示的是列索引

3.DataFrame操作

3.1 转置

直接字母T,线性代数上线。

  1. print(df6.T)
  2. #    a   b   c   d   e   f
  3. # A  0   6  12  18  24  30
  4. # B  1   7  13  19  25  31
  5. # C  2   8  14  20  26  32
  6. # D  3   9  15  21  27  33
  7. # E  4  10  16  22  28  34
  8. # F  5  11  17  23  29  35

3.2 描述性统计

使用describe可以对数据根据进行描述性统计。

  1. print(df6.describe())
  2. #                A          B          C          D          E          F
  3. # count   6.000000   6.000000   6.000000   6.000000   6.000000   6.000000
  4. # mean   15.000000  16.000000  17.000000  18.000000  19.000000  20.000000
  5. # std    11.224972  11.224972  11.224972  11.224972  11.224972  11.224972
  6. # min     0.000000   1.000000   2.000000   3.000000   4.000000   5.000000
  7. # 25%     7.500000   8.500000   9.500000  10.500000  11.500000  12.500000
  8. # 50%    15.000000  16.000000  17.000000  18.000000  19.000000  20.000000
  9. # 75%    22.500000  23.500000  24.500000  25.500000  26.500000  27.500000
  10. # max    30.000000  31.000000  32.000000  33.000000  34.000000  35.000000

3.3 计算

   使用sum默认对每列求和,sum(1)为对每行求和。

  1. print(df6.sum())
  2. # A     90
  3. # B     96
  4. # C    102
  5. # D    108
  6. # E    114
  7. # F    120
  8. # dtype: int64
  9. print(df6.sum(1))
  10. # a     15
  11. # b     51
  12. # c     87
  13. # d    123
  14. # e    159
  15. # f    195
  16. # dtype: int64

数乘运算使用apply。

  1. print(df6.apply(lambda x: x * 2))
  2. #     A   B   C   D   E   F
  3. # a   0   2   4   6   8  10
  4. # b  12  14  16  18  20  22
  5. # c  24  26  28  30  32  34
  6. # d  36  38  40  42  44  46
  7. # e  48  50  52  54  56  58
  8. # f  60  62  64  66  68  70

乘方运算跟matlab类似,直接使用两个*。

  1. print(df6**2)
  2. #      A    B     C     D     E     F
  3. # a    0    1     4     9    16    25
  4. # b   36   49    64    81   100   121
  5. # c  144  169   196   225   256   289
  6. # d  324  361   400   441   484   529
  7. # e  576  625   676   729   784   841
  8. # f  900  961  1024  1089  1156  1225

3.4 新增

扩充列可以直接像字典一样,列名对应一个list,但是注意list的长度要跟index的长度一致。

  1. df6['G']=['999','999','999','999','999','999']
  2. print(df6)
  3. #     A   B   C   D   E   F    G
  4. # a   0   1   2   3   4   5  999
  5. # b   6   7   8   9  10  11  999
  6. # c  12  13  14  15  16  17  999
  7. # d  18  19  20  21  22  23  999
  8. # e  24  25  26  27  28  29  999
  9. # f  30  31  32  33  34  35  999

还可以使用insert,使用这个方法可以指定把列插入到第几列,其他的列顺延。

  1. df6.insert(0, 'QQ', ['999','999','999','999','999','999'])
  2. print(df6)
  3. #     QQ   A   B   C   D   E   F
  4. # a  999   0   1   2   3   4   5
  5. # b  999   6   7   8   9  10  11
  6. # c  999  12  13  14  15  16  17
  7. # d  999  18  19  20  21  22  23
  8. # e  999  24  25  26  27  28  29
  9. # f  999  30  31  32  33  34  35

3.5 合并

使用join可以将两个DataFrame合并,但只根据行列名合并,并且以作用的那个DataFrame的为基准。

  1. # 也就是以df6为基准。
  2. df7 = pd.DataFrame(['my', 'name', 'is', 'a', 'b', 'c'], index=list('abcdef'), columns=list('G'))
  3. df8 = df6.join(df7)
  4. print(df8)
  5. #     A   B   C   D   E   F     G
  6. # a   0   1   2   3   4   5    my
  7. # b   6   7   8   9  10  11  name
  8. # c  12  13  14  15  16  17    is
  9. # d  18  19  20  21  22  23     a
  10. # e  24  25  26  27  28  29     b
  11. # f  30  31  32  33  34  35     c

但是,join这个方法还有how这个参数可以设置,合并两个DataFrame的交集或并集。参数为’inner’表示交集,'outer’表示并集。

  1. df7 = pd.DataFrame(['2', '6', '7', '19', '44', '77'], index=list('abekld'), columns=list('G'))
  2. df8=df6.join(df7,how='inner')
  3. df9=df6.join(df7,how='outer')
  4. print(df8)
  5. #     A   B   C   D   E   F   G
  6. # a   0   1   2   3   4   5   2
  7. # b   6   7   8   9  10  11   6
  8. # d  18  19  20  21  22  23  77
  9. # e  24  25  26  27  28  29   7
  10. print(df9)
  11. #       A     B     C     D     E     F    G
  12. # a   0.0   1.0   2.0   3.0   4.0   5.0    2
  13. # b   6.0   7.0   8.0   9.0  10.0  11.0    6
  14. # c  12.0  13.0  14.0  15.0  16.0  17.0  NaN
  15. # d  18.0  19.0  20.0  21.0  22.0  23.0   77
  16. # e  24.0  25.0  26.0  27.0  28.0  29.0    7
  17. # f  30.0  31.0  32.0  33.0  34.0  35.0  NaN
  18. # k   NaN   NaN   NaN   NaN   NaN   NaN   19
  19. # l   NaN   NaN   NaN   NaN   NaN   NaN   44

如果要合并多个Dataframe,可以用list把几个Dataframe装起来,然后使用concat转化为一个新的Dataframe。

  1. df10 = pd.DataFrame([1, 2, 3, 4, 5, 6], 
  2.                     index=list('ABCDEF'), columns=['a'])
  3. df11 = pd.DataFrame([10, 20, 30, 40, 50, 60],
  4.                     index=list('ABCDEF'), columns=['b'])
  5. df12 = pd.DataFrame([100, 200, 300, 400, 500, 600],
  6.                     index=list('ABCDEF'), columns=['c'])
  7. list1 = [df10.T, df11.T, df12.T]
  8. df13 = pd.concat(list1)
  9. print(df13)
  10. #      A    B    C    D    E    F
  11. # a    1    2    3    4    5    6
  12. # b   10   20   30   40   50   60
  13. # c  100  200  300  400  500  600

3.6 去重

  1.    df.drop_duplicates(subset=None,
  2.                    keep='first',
  3.                    inplace=False
  4.                    )

参数:

  • subset:指定是哪些列重复。
  • keep:去重后留下第几行,{‘first’, ‘last’, False}, default ‘first’},如果是False,则去除全部重复的行。
  • inplace:是否作用于原来的df。
  1. df14 = pd.DataFrame(data=[[1, 2, 3],
  2.                           [1, 2, 4],
  3.                           [1, 2, 4],
  4.                           [1, 2, 3],
  5.                           [1, 2, 5],
  6.                           [1, 2, 5]],
  7.                     index=list('ABCDEF'),
  8.                     columns=['a', 'b', 'c'])
  9. print(df14)
  10. #    a  b  c
  11. # A  1  2  3
  12. # B  1  2  4
  13. # C  1  2  4
  14. # D  1  2  3
  15. # E  1  2  5
  16. # F  1  2  5

去除重复行,保留重复行中最后一行

  1. df14.drop_duplicates(keep='last')
  2. #    a  b  c
  3. # C  1  2  4
  4. # D  1  2  3
  5. # F  1  2  5

去除’c’列中有重复的值所在的行

  1. print(df14.drop_duplicates(subset=('c',)))
  2. #    a  b  c
  3. # A  1  2  3
  4. # B  1  2  4
  5. # E  1  2  5
     

 

 

 

 

 

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

pd.DataFrame()函数解析 的相关文章

随机推荐

  • 数据科学猫:强化学习的定义

    进击的橘子猫正式改名上线啦 我的CSDN主页 https blog csdn net Orange Spotty Cat 也欢迎大家搜索微信公众号 进击的橘子猫 我也会定期分享数据科学 Python 大数据 项目管理与PPT的相关知识 让我
  • DUT处理延迟 对Monitor采数和验证环境结束机制的影响分析

    1 问题背景 一句话描述 验证环境中 当激励完成发送时 由于DUT存在处理延迟 monitor在延迟一段时间后才能采集到DUT完整的输出 如何设计验证环境的结束机制 此处的验证环境结束机制 可以认为是main phase的结束控制 但并不单
  • 21. Merge Two Sorted Lists

    题目描述 将两个升序链表合并为一个新的 升序 链表并返回 新链表是通过拼接给定的两个链表的所有节点组成的 示例 1 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img 0VfjZ6Ct 1686493063120 i
  • STM32CubeMX工程配置说明

    一 STM32CubeMX配置 1 1 设置时钟 单片机的时钟 相当于人的心跳 只要单片机工作 必须要开启时钟 STM32单片机共有4个时钟来源 名称 缩写 频率 外部连接 功能 用途 特性 外部高速晶体振荡器 HSE 4 16MHz 4
  • Android手把手实战APP首页 下拉刷新 自动加载

    一 概述 作为一名三年Android开发经验的程序员 今天和大家一起实战一款APP的首页功能 这个首页在我们平时接触中还是很常见的 虽然页面简单 但是里面涉及的功能点还是挺多的 代码如有不足的还望各路同仁指点一二 页面中使用的开发库 整个首
  • 国家税务总局全国增值税发票查验平台网站js逆向分析及全逆向算法还原

    本文教程针对的是2021年7月2日时国税查验平台的js分析 其中版本号为V2 0 06 009 主要分析内容为key9和flwq39以及fplx这3个参数的算法 其中key9分为获取验证码阶段和查验阶段 算法有所区别 flwq39同理 教程
  • js-倒计时

    p p
  • Redis的底层数据结构

    1 Redis的五种数据类型及七种底层结构 键的类型只能为字符串 值支持五种数据类型 字符串 列表 集合 散列表 有序集合 对于Redis来讲 对于键值对来说 键总是字符串 值就是五个中的一个 所以我们只用关心值的类型 值有五种数据类型 S
  • 理解CPU/寄存器/内存之间的关系

    转自 https blog csdn net qq 27689785 article details 82975575 CPU 寄存器 内存 因为要了解多线程 自然少不了一些硬件知识的科普 我没有系统学习过硬件知识 仅仅是从书上以及网络上看
  • Node.js全栈开发笔记与心得

    highlight a11y dark 一 Node js 全栈开发资料 1 前端入门基础 慕课网HTML CSS入门 慕课网JS入门 javascript进阶篇 菜鸟教程html部分 菜鸟教程CSS部分 阮一峰js入门 阮一峰es6教程
  • 一道有关逆序对的算法题---归并、树状数组、线段树三种解法

    这阵子巨忙 呜呜呜 上周末打了第十四届蓝桥杯的校内赛 总的来说 题目是很简单的 不过其中的压轴题挺有意思 所以我打算来一发博客记录记录这道算法题 废话不多说了 上题 问题描述 小蓝有一个序列 a 1 a 2 a n 每次可以交换相邻的两个元
  • 服务器系统网口,服务器网口设置方法

    服务器网口设置方法 内容精选 换一换 介绍常见的安全组配置示例 如下示例中 出方向默认全通 仅介绍入方向规则配置方法 不同安全组内的云耀云服务器内网互通仅允许特定 IP 地址远程连接云耀云服务器SSH远程连接Linux云耀云服务器RDP远程
  • 数据库原理-ER模型转换为关系模型

    1 ER图转换成关系模式集的算法 联系类型的转换 不同的情况做不同的处理 二元联系类型的转换 若实体间联系是1 1 可以在两个实体类型转换成的两个关系模式中任意一个关系模式的属性中加入另一个关系模式的键和联系类型的属性 若实体间联系是1 n
  • pandas dataframe 新增单列和多列

    dataframe 新增单列 assign方法 dataframe assign方法 返回一个新对象 副本 不影响旧dataframe对象 import pandas as pd df pd DataFrame col 1 0 1 2 3
  • C/C++混用的线性表基本操作(Five的期末复习,part1)

    一 线性表的定义 线性表 零个或多个数据元素的有限序列 几个关键的地方 首先它是一个序列 也就是说 元素之间是有顺序的 若元素存在多个 则第一个元素无前驱 最后一个元素无后继 其他每个元素都只有一个前驱和后继 然后 线性表强调是有限的 事实
  • tensorflow的 jupyter环境 error :UnrecognizedFlagError: Unknown command line flag 'f' 解决办法

    加一行代码 tf app flags DEFINE string f kernel
  • VS2017+DirectX9环境配置

    正好学完浅墨大神的游戏编程著作 来写一下VS2017怎么配置DirectX9 首先去下一个DX9的SDK SDK下载 然后找地方安装上 不过可能安装会出问题 我的情况解决方式如下 去控制面板里面卸载掉这两个东西 然后再安装下载下来的DXSD
  • ogre 1.7.0

    今天编译了orge 第一次安装编译orge挺麻烦的 现把编译和安装步骤总结一下 1 ogre 1 7 0的下载地址 https sourceforge net projects ogre files ogre 1 7 ogre v1 7 0
  • Python之赋值、深拷贝与浅拷贝

    一图胜千言 先上三幅小图 图片来源 赋值操作 浅拷贝操作 深拷贝操作 赋值操作 赋值是将一个对象指向一个已经存在的对象的过程 通常使用 texttt 来完成赋值操作
  • pd.DataFrame()函数解析

    文章目录 DataFrame是Python中Pandas库中的一种数据结构 它类似excel 是一种二维表 0 简介 DataFrame的单元格可以存放数值 字符串等 这和excel表很像 同时DataFrame可以设置列名columns与