欢迎关注WX公众号:【程序员管小亮】

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

文章目录

  • 欢迎关注WX公众号:【程序员管小亮】
    • ==DataFrame是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表。==
    • 0 简介
    • 1 创建DataFrame
      • 1.1 使用numpy函数创建
      • 1.2 直接创建
      • 1.3 使用字典创建
    • 2 DataFrame属性
      • 2.1 查看列的数据类型
      • 2.2 查看DataFrame的头尾
      • 2.3 查看行名与列名
      • 2.4 查看数据值
      • 2.5 查看行列数
      • 2.6 切片
      • 2.7 索引
    • 3 DataFrame操作
      • 3.1 转置
      • 3.2 描述性统计
      • 3.3 计算
      • 3.4 新增
      • 3.5 合并
      • 3.6 去重
    • 参考文章

0 简介

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

1 创建DataFrame

以下的实验是在python3.5.6版本下进行的。

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

import pandas as pd
import numpy as np
1.1 使用numpy函数创建

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

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

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

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

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

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

df3 = pd.DataFrame(np.random.randn(3, 3), index=list('ABC'), columns=list('ABC'))#           A         B         C
# A  1.106838  0.309086  0.748472
# B  0.439228 -0.213154 -1.438647
# C  0.292450  0.841237 -0.069207
1.2 直接创建
import pandas as pd
import numpy as npdf4 = pd.DataFrame([[1, 2, 3], [2, 3, 4],[3, 4, 5]],index=list('abc'), columns=list('ABC'))
print(df4)#    A  B  C
# a  1  2  3
# b  2  3  4
# c  3  4  5
1.3 使用字典创建
import pandas as pd
import numpy as npdic1 = {'name': ['张三', '李四', '王二麻子', '小淘气'], 'age': [37, 30, 50, 16], 'gender': ['男', '男', '男', '女']}
df5 = pd.DataFrame(dic1)
print(df5)#    age gender  name
# 0   37      男    张三
# 1   30      男    李四
# 2   50      男  王二麻子
# 3   16      女   小淘气

2 DataFrame属性

2.1 查看列的数据类型
print(df5.dtypes)# age        int64
# gender    object
# name      object
# dtype: object
2.2 查看DataFrame的头尾

使用head可以查看前几行的数据,默认的是前5行,不过也可以自己设置。

使用tail可以查看后几行的数据,默认也是5行,参数可以自己设置。

比如看前5行。

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

比如只看前2行。

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

比如看后5行。

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

比如只看后2行。

print(df6.tail(2))#     A   B   C   D   E   F
# e  24  25  26  27  28  29
# f  30  31  32  33  34  35
2.3 查看行名与列名

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

print(df6.index)
print(df6.columns)# Index(['a', 'b', 'c', 'd', 'e', 'f'], dtype='object')
# Index(['A', 'B', 'C', 'D', 'E', 'F'], dtype='object')
2.4 查看数据值

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

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

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

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

如果查看某一行所有的数据值。使用iloc查看数据值(但是好像只能根据行来查看?),iloc是根据数字索引(也就是行号)。可以看一下博客pandas.iloc()函数解析。

print(df6.iloc[0])# A    0
# B    1
# C    2
# D    3
# E    4
# F    5
# Name: a, dtype: int32
2.5 查看行列数

使用shape查看行列数,参数为0表示查看行数,参数为1表示查看列数。

print(df6.shape[0])
print(df6.shape[1])# 6
# 6
2.6 切片

使用冒号进行切片。

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

3 DataFrame操作

3.1 转置

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

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

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

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

如果有的列是非数值型的,那么就不会进行统计。

如果想对行进行描述性统计,转置后再进行describe。

3.3 计算

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

print(df6.sum())
# A     90
# B     96
# C    102
# D    108
# E    114
# F    120
# dtype: int64print(df6.sum(1))
# a     15
# b     51
# c     87
# d    123
# e    159
# f    195
# dtype: int64

数乘运算使用apply。

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

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

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

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

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

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

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

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

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

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

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

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

df10 = pd.DataFrame([1, 2, 3, 4, 5, 6], index=list('ABCDEF'), columns=['a'])
df11 = pd.DataFrame([10, 20, 30, 40, 50, 60],index=list('ABCDEF'), columns=['b'])
df12 = pd.DataFrame([100, 200, 300, 400, 500, 600],index=list('ABCDEF'), columns=['c'])
list1 = [df10.T, df11.T, df12.T]
df13 = pd.concat(list1)
print(df13)#      A    B    C    D    E    F
# a    1    2    3    4    5    6
# b   10   20   30   40   50   60
# c  100  200  300  400  500  600
3.6 去重
df.drop_duplicates(subset=None,keep='first',inplace=False)

参数:

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

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

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

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

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

如果想要更多的资源,欢迎关注 @我是管小亮,文字强迫症MAX~

回复【福利】即可获取我为你准备的大礼,包括C++,编程四大件,NLP,深度学习等等的资料。

想看更多文(段)章(子),欢迎关注微信公众号「程序员管小亮」~

参考文章

  • 【Python学习笔记】Pandas库之DataFrame
  • pandas模块常用函数解析之DataFrame

pd.DataFrame()函数解析(最清晰的解释)相关推荐

  1. pd.Series()函数解析(最清晰的解释)

    欢迎关注WX公众号:[程序员管小亮] 1. Series介绍 Pandas模块的数据结构主要有两:1.Series :2.DataFrame series是一个一维数组,是基于NumPy的ndarra ...

  2. pd.Series()函数

    Pandas模块的数据结构主要有两:1.Series :2.DataFrame series是一个一维数组,是基于NumPy的ndarray结构: Pandas会默认用0到n-1来作为series的i ...

  3. python重要的第三方库pandas模块常用函数解析之DataFrame

    pandas模块常用函数解析之DataFrame 关注公众号"轻松学编程"了解更多. 以下命令都是在浏览器中输入. cmd命令窗口输入:jupyter notebook 打开浏览器 ...

  4. pd.DataFrame.melt()函数

    对这个函数的理解就是二维变一维,就是逆序数列melt(self, id_vars=None, value_vars=None, var_name=None, value_name='value', c ...

  5. 例子解释,pandas的pd.read_csv函数,quoting = 3是什么意思

    问题 pandas的pd.read_csv函数,quoting = 3是什么意思? 新建一个test.txt文件,内容如下: 哈哈 haha "haha" "哈哈&quo ...

  6. 『Python核心技术与实战』pandas.DataFrame()函数介绍

    pandas.DataFrame()函数介绍! 文章目录 一. 创建DataFrame 1.1. numpy创建 1.2. 直接创建 1.3. 字典创建 1.4. Series和DataFrame 二 ...

  7. dataframe groupby_PySpark SQL——SQL和pd.DataFrame的结合体

    导读 昨日推文PySpark环境搭建和简介,今天开始介绍PySpark中的第一个重要组件SQL/DataFrame,实际上从名字便可看出这是关系型数据库SQL和pandas.DataFrame的结合体 ...

  8. pd.DataFrame系列

    文章目录 如何让dataframe优雅的增加一列? 获取一个dataframe的后三列,0行到100行 读取excel,将结果写入到一个excel的多个sheet 筛选数据啦 DataFrame.gr ...

  9. [Python中pandas实现独热编码][pd.get_dummies()函数]

    快速理解 独热编码前,存在1列x3行的数据: 1列的列名称为: 动物名称 3行中第1行的值为:      猫 3行中第2行的值为:      狗 3行中第3行的值为:      猫 独热编码后,变为2 ...

最新文章

  1. Linux下文件如果没有权限不能被Apache访问
  2. SQL Server游标的使用【转】
  3. Two Merged Sequences(CF 1144 G)
  4. HDFS、MR、Kafka、Storm、Spark、Hbase、Redis原理图
  5. HATEOAS的RESTful服务。 超媒体:REST的秘密要素
  6. 【HDU - 1285】确定比赛名次 (拓扑排序)
  7. Activiti 流程实例、任务、执行对象及相关的表
  8. app devops建设
  9. 8.运输层(2)---TCP
  10. presto执行一条查询分为七步
  11. SqlServer彻底卸载,适用于任何版本,亲测了n次都可用
  12. 系统分析师真题__专项:计算机系统与配置 2
  13. 用 windows 资源监视器 查看 被占用的文件
  14. OSError: could not get source code
  15. 数据表底层的B+树的叶子结点为啥用类似双链表连接起来
  16. python之“太空大战”小游戏实现
  17. 跨平台跨端的登录流程及其安全设计
  18. 诺基亚安卓手机_神速!HMD公布诺基亚手机安卓10升级计划
  19. 【嵌入式基础】串口通信
  20. hibernate mysql 时间比较_Hibernate中HQL函数汇总及获取当前时间进行比较举例

热门文章

  1. UIAutomatorViewer初体验
  2. 目标检测综述(二:古典方法对比现代方式以及目标检测算法相关概述)
  3. hosts : IP - 主机名/域名映射
  4. MIUI ROM 定制教程
  5. PyTorch非线性函数拟合
  6. hapi mysql项目实战路由初始化_hapi框架搭建记录(三):Joi数据校验和Sequelize(数据迁移、填充数据)...
  7. 一张表了解四大物联网通信技术差异:NB-IoT 、LTEeMTC、LoRa与SigFox
  8. 炫龙银魂t1配置_炫龙银魂T1,不一样的外观一样的强悍
  9. 动态搜索图书:可以按书名、作者、出版社以及价格范围进行搜索。(在IDEA中mybatis)
  10. CreateProcess error=193, %1 不是有效的 Win32 应用程序