pd.DataFrame()函数解析(最清晰的解释)
欢迎关注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()函数解析(最清晰的解释)相关推荐
- pd.Series()函数解析(最清晰的解释)
欢迎关注WX公众号:[程序员管小亮] 1. Series介绍 Pandas模块的数据结构主要有两:1.Series :2.DataFrame series是一个一维数组,是基于NumPy的ndarra ...
- pd.Series()函数
Pandas模块的数据结构主要有两:1.Series :2.DataFrame series是一个一维数组,是基于NumPy的ndarray结构: Pandas会默认用0到n-1来作为series的i ...
- python重要的第三方库pandas模块常用函数解析之DataFrame
pandas模块常用函数解析之DataFrame 关注公众号"轻松学编程"了解更多. 以下命令都是在浏览器中输入. cmd命令窗口输入:jupyter notebook 打开浏览器 ...
- pd.DataFrame.melt()函数
对这个函数的理解就是二维变一维,就是逆序数列melt(self, id_vars=None, value_vars=None, var_name=None, value_name='value', c ...
- 例子解释,pandas的pd.read_csv函数,quoting = 3是什么意思
问题 pandas的pd.read_csv函数,quoting = 3是什么意思? 新建一个test.txt文件,内容如下: 哈哈 haha "haha" "哈哈&quo ...
- 『Python核心技术与实战』pandas.DataFrame()函数介绍
pandas.DataFrame()函数介绍! 文章目录 一. 创建DataFrame 1.1. numpy创建 1.2. 直接创建 1.3. 字典创建 1.4. Series和DataFrame 二 ...
- dataframe groupby_PySpark SQL——SQL和pd.DataFrame的结合体
导读 昨日推文PySpark环境搭建和简介,今天开始介绍PySpark中的第一个重要组件SQL/DataFrame,实际上从名字便可看出这是关系型数据库SQL和pandas.DataFrame的结合体 ...
- pd.DataFrame系列
文章目录 如何让dataframe优雅的增加一列? 获取一个dataframe的后三列,0行到100行 读取excel,将结果写入到一个excel的多个sheet 筛选数据啦 DataFrame.gr ...
- [Python中pandas实现独热编码][pd.get_dummies()函数]
快速理解 独热编码前,存在1列x3行的数据: 1列的列名称为: 动物名称 3行中第1行的值为: 猫 3行中第2行的值为: 狗 3行中第3行的值为: 猫 独热编码后,变为2 ...
最新文章
- Linux下文件如果没有权限不能被Apache访问
- SQL Server游标的使用【转】
- Two Merged Sequences(CF 1144 G)
- HDFS、MR、Kafka、Storm、Spark、Hbase、Redis原理图
- HATEOAS的RESTful服务。 超媒体:REST的秘密要素
- 【HDU - 1285】确定比赛名次 (拓扑排序)
- Activiti 流程实例、任务、执行对象及相关的表
- app devops建设
- 8.运输层(2)---TCP
- presto执行一条查询分为七步
- SqlServer彻底卸载,适用于任何版本,亲测了n次都可用
- 系统分析师真题__专项:计算机系统与配置 2
- 用 windows 资源监视器 查看 被占用的文件
- OSError: could not get source code
- 数据表底层的B+树的叶子结点为啥用类似双链表连接起来
- python之“太空大战”小游戏实现
- 跨平台跨端的登录流程及其安全设计
- 诺基亚安卓手机_神速!HMD公布诺基亚手机安卓10升级计划
- 【嵌入式基础】串口通信
- hibernate mysql 时间比较_Hibernate中HQL函数汇总及获取当前时间进行比较举例
热门文章
- UIAutomatorViewer初体验
- 目标检测综述(二:古典方法对比现代方式以及目标检测算法相关概述)
- hosts : IP - 主机名/域名映射
- MIUI ROM 定制教程
- PyTorch非线性函数拟合
- hapi mysql项目实战路由初始化_hapi框架搭建记录(三):Joi数据校验和Sequelize(数据迁移、填充数据)...
- 一张表了解四大物联网通信技术差异:NB-IoT 、LTEeMTC、LoRa与SigFox
- 炫龙银魂t1配置_炫龙银魂T1,不一样的外观一样的强悍
- 动态搜索图书:可以按书名、作者、出版社以及价格范围进行搜索。(在IDEA中mybatis)
- CreateProcess error=193, %1 不是有效的 Win32 应用程序