入门Pandas不可不知的技巧

df.describe() 详解+用法+示例 Python 3.8.8 (default, Apr 13 2021, 15:08:03) [MSC v.1916 64 bit (AMD64)] Type 'copyright', 'credits' or 'license' for more information IPython 7.22.0 -- An enhanced Interactive Python. Type '?' for help. PyDev console: using IPython 7.22.0 Python 3.8.8 (d 阅读详情

今天来跟大家分享 Pandas 的一些常用知识点,文章内容由公众号读者 Peter 创作。

如果你用 Python 做数据分析,必然会绕不过 Pandas 的使用,实际上, Python 也是由于 numpy、pandas 等数据科学库的出现,才开始在数据科学领域实现了快速的发展,因此,学好 Pandas 有很重要的现实意义。

本文总结自己经常使用的pandas操作方法:

  • 创建DataFrame数据

  • 查看数据相关信息

  • 查看头尾文件

  • 花样取数

  • 切片取数

  • 常见函数使用

首先,导入包

import pandas as pd
import numpy as np

01 创建DataFrame数据

方式1:通过字典直接创建

df1 = pd.DataFrame({
    "name":["小明","小红","小孙","王小","关宇","刘蓓","张菲"],
    "age":[20,18,27,20,28,18,25],
    "sex":["男","女","男","男","男","女","女"],
    "score":[669,570,642,590,601,619,701],
    "address":["北京","深圳","广州","武汉","深圳","广州","长沙"]
})

df1

数据如下图:

方式2:通过本地数据读取

从本地文件中读取进来。现在本地有一个文件:学生信息.xlsx直接通过pd.read_excel()读进来:

df2 = pd.read_excel("学生信息.xlsx")
df2

可以看到效果和上面是一样的

02 数据探索

查看数据shape

shape表示数据是由多少行和列组成:

df1.shape  # (7,5)

查看字段属性名称

df1.columns

查看属性的数据类型

df1.dtypes

可以看到只有两种数据类型:int64和object

查看数据是否缺失

df1.isnull()   # 如果缺失显示为True,否则显示False
df1.isnull().sum() # 统计缺失值的个数。一个True计数一次

结果显示:本次数据是没有缺失值的

查看数据行索引

df1.index

查看数据描述信息

df1.describe

查看数据统计值

统计值信息只会显示类型为数值型的数据统计值信息:

df1.describe()

统计值的结果包含:个数count、均值mean、方差std、最值min\max、四分位数25%、中位数50%、四分之三分位数75%。

03 查看头尾文件

通过head和tail方法能够快速查看数据的头尾文件。

head

df1.head()   # 默认是查看前5行数据
df1.head(3)  # 指定显示的行数

tail

df1.tail()    # 默认尾部5行
df1.tail(3)   # 指定尾部3行数据

04 花样取数

从pandas的DataFrame数据框中取出我们想要的数据,然后进行处理

取出某个字段的数据

我们取出name这列的数据:

name = df1["name"]
name

# 结果
0    小明
1    小红
2    小孙
3    王小
4    关宇
5    刘蓓
6    张菲
Name: name, dtype: object

取出多个字段的数据

比如我们取出name和age列的数据:

name_age = df1[["name","age"]]  
name_age

# 结果
  name age
0 小明 20
1 小红 18
2 小孙 27
3 王小 20
4 关宇 28
5 刘蓓 18
6 张菲 25

根据字段类型选择数据

比如,我们想选择字段类型为int64的数据,通过查看的字段数据类型显示:age和score都是int64类型

1、选择单个数据类型
# 1、选择单个数据类型

df1.select_dtypes(include='int64')

# 结果
  age score
0 20 669
1 18 570
2 27 642
3 20 590
4 28 601
5 18 619
6 25 701
2、同时选择多个类型
df1.select_dtypes(include=['int64','object'])

# 结果
  name  age sex score address
0 小明  20  男 669    北京
1 小红  18  女 570    深圳
2 小孙  27  男 642    广州
3 王小  20  男 590    武汉
4 关宇  28  男 601    深圳
5 刘蓓  18  女 619    广州
6 张菲  25  女 701    长沙

因为数据中只有int64,object,所以我们全部选出来了。

3、选择排除某些数据类型之外的数据:
# 选择除了int64类型之外的数据
# 排除name和score字段之外的数据
df1.select_dtypes(exclude='int64') 

# 结果
  name sex address
0 小明 男   北京
1 小红 女   深圳
2 小孙 男   广州
3 王小 男   武汉
4 关宇 男   深圳
5 刘蓓 女   广州
6 张菲 女   长沙

根据数值大小取数

1、直接通过判断大小来取数:
df1[df1["age"] == 20]  # 年龄等于20
df1[df1["age"] != 20]  # 年龄不等于20
df1[df1["age"] >= 20]  # 年龄大于等于20
2、多个判断条件连用

第一次使用上面的方法报错:关键词是ambiguous。判断条件很让pandas混淆,改成下面的写法成功解决:

df1[(df1["age"] >= 20) & (df1["age"] < 27)]

根据字符串取数

1、通过单个条件取数
# 1、单条数据
df1[df1["name"] == "小明"]  

# 结果
  name  age sex  score address
0 小明  20  男   669   北京

2、通过多个条件取数

选择姓名是小明,或者年龄大于25的数据

df1[(df1["name"] == "小明") | (df1["age"] > 25)]

# 结果
  name  age sex  score address
0 小明  20  男  669   北京
2 小孙  27  男  642   广州
4 关宇  28  男  601   深圳
3、字符串的开始、结尾、包含函数
  • str.startswith(string)

  • str.endswith(string)

  • str.contains(string)

# 1、取出以“小”开头的姓名
df1[df1["name"].str.startswith("小")]  # name以"小"开头

# 结果
 name  age sex  score address
0 小明 20 男    669 北京
1 小红 18 女    570 深圳
2 小孙 27 男    642 广州
# 以“关”开始
df1[df1["name"].str.startswith("关")]

# 结果
 name  age sex  score address
4 关宇 28 男    601 深圳
# 3、以“菲”结尾
df1[df1["name"].str.endswith("菲")]

# 结果
  name  age sex  score address
6 张菲  25  女   701   长沙
# 取出包含“小”的数据:不管小是在开头,还是结尾都会被选出来
df1[df1["name"].str.contains("小")]

# 结果

  name  age sex  score address
0 小明  20  男  669  北京
1 小红  18  女  570  深圳
2 小孙  27  男  642  广州
3 王小  20  男  590  武汉

上面的王小不是小开头,但是包含小,所以也被选出来。

4、字符串取反操作

取反符号是波浪线:~

下面的例子是:取出名字name中不包含小的数据,只有3个人名字中没有小字。

# 取出不包含小的数据
df1[~df1["name"].str.contains("小")]

# 结果
  name  age sex  score address
4 关宇  28  男  601   深圳
5 刘蓓  18  女  619   广州
6 张菲  25  女  701   长沙

05 切片取数

切片是Python中存在的概念,在pandas中同样可以使用。切片中存在3个概念:start、stop、step

  • start:起始索引,包含

  • stop:结束索引,不包含

  • step:步长,可正可负;

写法为:[start:stop:step]

步长为正数

1、通过下面的3个案例说明:起始索引默认从0开始,步长默认是1

2、指定起始索引,不指定结束索引,表示一直取到数据末尾

df1[4:]  # 从索引4开始取到末尾

# 结果
  name  age sex  score address
4 关宇  28  男  601   深圳
5 刘蓓  18  女  619   广州
6 张菲  25  女  701   长沙

3、改变步长的值

df1[0:4:2]  # 改变步长:每隔2个值取一行数据

# 结果
  name  age sex  score address
0 小明  20  男   669   北京
2 小孙  27  男   642   广州

上面的例子不指定起始索引:

df1[:4:2]  # 默认从0开始

4、只指定步长

df1[::2]   # 从头到尾,步长为2

# 结果
  name  age sex  score address
0 小明  20  男   669   北京
2 小孙  27  男  642   广州
4 关宇  28  男  601   深圳
6 张菲  25  女  701   长沙

步长为负数

1、步长为-1,默认是倒序输出结果

df1[::-1]  # 倒序输出

# 结果
   name  age sex  score address
6  张菲   25 女    701  长沙
5  刘蓓   18 女    619  广州
4  关宇   28 男    601  深圳
3  王小   20 男    590  武汉
2  小孙   27 男    642  广州
1  小红   18 女    570  深圳
0  小明   20 男    669  北京

2、步长为负,指定起始和终止索引,起始索引大于终止索引

df1[4:0:-1]
  name  age sex  score address
4 关宇  28  男   601   深圳
3 王小  20  男   590   武汉
2 小孙  27  男   642   广州
1 小红  18  女   570   深圳

3、起始和终止索引为负数

df1[-1:-5:-1]  # 最后一行记录索引为-1,不包含索引为-5的数据
 name  age sex  score address
6 张菲 25 女    701  长沙
5 刘蓓 18 女    619  广州
4 关宇 28 男    601  深圳
3 王小 20 男    590  武汉

06 常用函数

统计元素个数

很多时候我们需要统计某个列中每个元素出现的个数,相当于是做词频统计,使用:value_counts()方法,具体案例为:

⚠️:新数据中df1增加了一列:班级class,后续有作用

比如我们想统计每个城市出现了多少次:

# 统计中每个城市各出现了多少次

address = df1["address"].value_counts()
address

结果自动是降序排列的Series类型数据

索引重置

索引重置使用reset_index():

address_new = address.reset_index()
address_new

还比如我们想从数据中单独取出sex="男"的数据:

fale = df1[df1["sex"] == "男"]
fale

我们观察到数据前面的索引还是原来的,但是我们希望的是从0开始显示,比较符合我们的习惯:

fale_1 = fale.reset_index()
fale_1

出现的结果中索引是我们想要的结果,但是出现了一列新的数据,就是原来的索引构成的数据,这不是我们想要的数据,需要去除:

fale_1 = fale.reset_index(drop=True)  # 加上参数即可解决
fale_1

属性重命名

使用的是rename函数,传入columsn参数:

address_new = address_new.rename(columns={"index":"address",
                                         "address":"number"
                                        })
address_new

groupby使用

groupby主要是实现分组统计的功能:

1、比如我们想统计男女各自的总分

# 统计男女的总成绩:sum

sex_score = df1.groupby("sex")["score"].sum()
sex_score

2、求男女各自的平均分mean

# 统计男女的平均成绩:mean

sex_score = df1.groupby("sex")["score"].mean()
sex_score

3、根据男女性别sex、班级class求总分

# 先根据性别、班级求总分

sex_class = df1.groupby(["sex","class"])["score"].sum()
sex_class

一行代码实现上面的功能:

# 一行代码实现

df1.groupby(["sex","class"])["score"].sum().reset_index()

apply函数

还是上面的df1数据集:

1、需求1:我们想将性别中的男变成1,女变成0

# 1、改变:男-1,女-0

df2 = df1.copy()  # 生成一个副本

df2["sex"] = df2["sex"].apply(lambda x: 1 if x=="男" else 0)  # 通过匿名函数解决
df2

我们还可以自定义一个函数来实现:

#  自定义函数

def apply_sex(x):
    return 1 if x == "男" else 0

df3 = df1.copy()  # 生成一个副本df3

df3["sex"] = df3["sex"].apply(apply_sex)  # 通过自定义函数解决
df3

2、还比如我们想给每个城市的后面加上一个“市”,变成北京市、深圳市等:

# 2、给每个城市加上一个字:市,变成北京市、深圳市等

df4 = df1.copy()

df4["address"] = df4["address"].apply(lambda x: x + "市")
df4

总结

本文中从pandas中DataFrame数据的创建,常见数据信息的探索,再到如何从数据框中获取到我们指定的数据,最后介绍了笔者常用的处理数据的方法,希望对入门或者对不熟悉pandas的朋友有所帮助。Pandas真的是十分强大,学好之后会大大节省我们处理数据的时间。

推荐阅读:入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影自动化办公: PDF提取图片和表格 | html一键保存pdf | Pdf转Word轻松搞定表格和水印! | Pdf转Word年度爆款文案1).卧槽!Pdf转Word用Python轻松搞定!2).学Python真香!我用100行代码做了个网站,帮人PS旅行图片,赚个鸡腿吃3).首播过亿,火爆全网,我分析了《乘风破浪的姐姐》,发现了这些秘密 4).80行代码!用Python做一个哆来A梦分身 5).你必须掌握的20个python代码,短小精悍,用处无穷 6).30个Python奇淫技巧集 7).我总结的80页《菜鸟学Python精选干货.pdf》,都是干货 8).再见Python!我要学Go了!2500字深度分析!9).发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片
pandas 快速入门教程 pandas 学习笔记学习目的一、认识pandas二、安装pandas三、数据结构四、导入Excel数据五、输出Excel数据六、数据检查七、数据查看八、数据清洗九、数据选择十、数据排序十一、数据分组十二、数据透视十三、数据合并十四、数据图表合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyP... 阅读详情

相关推荐

【Pandas数据筛选之通配符操作】—— 灵活、高效的数据处理

【Pandas数据筛选之通配符操作】—— 灵活、高效的数据处理Pandas是Python中广为使用的数据处理库,其中数据筛选是其重要功能之一。在实际数据处理过程中,常常需要通过通配符匹配来灵活地筛选所需数据。本文将详细介绍如何使用通配符来对Pandas DataFrame进行筛选。接下来,我们将通过三种通配符进行筛选:"*“表示匹配任意字符,”?“表示匹配单个字符,”[ ]"表示匹配括号内的任意一个字符。

. 996

Python二维列表创建DataFrame

import pandas as pd data = [[88,89,96],[95,93,92],[90,87,95]] df1=pd.DataFrame(data,index=['小明','小红','小兰'],columns=['语文','数学','英语']) print(df1) 运行结果: 语文 数学 英语 小明 88 89 96 小红 95 93 92 小兰 90 87 95 ...

cooom的专栏 2189

PCIe信号眼图总是不开?手把手教你调CTLE和DFE参数(附实测波形对比)

本文详细解析了PCIe信号眼图调试中CTLE和DFE参数的优化方法,帮助硬件工程师解决眼图无法张开的问题。通过实际案例和步骤指导,介绍了如何调整CTLE直流增益和DFE抽头系数,提升接收端均衡器性能,确保信号完整性。

weixin_26805597的博客 220

pandas中DataFrame的常用操作

1. DataFrame的创建 (1)手动创建 df = pd.DataFrame({'a':[1,2,3],'b':[1,2,3]}) print(df) 结果为: a b 0 1 1 1 2 2 2 3 3 (2)用panda导入文件数据 例如导入.csv类型的文件,导入之后直接变成了DataFrame类型的数据 df = pd.read_csv('/file_path/file_name.csv') 2. DataFrame类型数据的提取 因为DataFrame类型的数据通常

comli_cn的博客 1863

锐捷路由器DNS Proxy保姆级配置教程:从零到实战,手把手教你搞定内网域名解析

本文提供锐捷路由器DNS Proxy功能的详细配置教程,从基础环境搭建到实战测试,手把手教你实现内网域名解析。涵盖上游DNS设置、内网域名映射、故障排查等关键步骤,帮助网络管理员快速解决内网访问难题,提升工作效率。

weixin_29284657的博客 558

# ubuntu 系统使用 yum命令报错 There are no enabled repos.Run “yum repolist all“ to see the repos you have...

# ubuntu 系统使用 yum命令报错 There are no enabled repos.Run "yum repolist all" to see the repos you have.You can enable repos with yum-config-manager --enable

段子手168的博客 6684

【Python基础】入门Pandas不可不知的技巧

来源:Python数据之道作者:Peter整理:阳哥如果你用 Python 做数据分析,必然会绕不过 Pandas 的使用,实际上, Python 也是由于 numpy、pandas 等数...

fengdu78的博客 680

无人机航拍图像匹配——SIFT算法实践(含代码)

无人机航拍图像匹配——SIFT算法实践(含代码)

zhangzhao147的博客 6395

入门Pandas,你必须掌握的技巧

入门Pandas,你必须掌握的技巧 总结自己经常使用的pandas操作方法: 创建DataFrame数据 查看数据相关信息 查看头尾文件 花样取数 切片取数 常见函数使用 导入包 import pandas as pd import numpy as np 使用技巧1-创建DataFrame数据 方式1:自己直接创建 df1 = pd.DataFrame({ "name":["小明","小红","小孙","王小","关宇","刘蓓","张菲"], "age":[20,18,27,2

尤尔小屋 1026

RK3568平台开发系列:Android环境下CAN的使用

在RK3568平台上,我们可以利用Android环境中的API来实现CAN的使用。通过以上步骤,我们可以在Android应用中发送和接收CAN数据,并进行相应的处理。当接收到CAN数据时,将触发onMessageReceived回调方法,我们可以在这个方法中对接收到的数据进行处理。在上述代码中,我们指定了CAN的ID为0x123,数据为{0x01, 0x02, 0x03},并设置了标志位和周期。接收CAN数据需要注册一个监听器,并在监听器中处理接收到的数据。发送CAN数据需要指定CAN的ID和数据。

2301_79330513的博客 1913

必知必会:DeepSeek-R1训练流程详解

必知必会:DeepSeek-R1训练流程详解

丨汀、的博客 288

入门Pandas必须掌握的技巧

入门Pandas,必须掌握的技巧 总结自己经常使用的pandas操作方法: 创建DataFrame数据 查看数据相关信息 查看头尾文件 花样取数 切片取数 常见函数使用 导入包 import pandas as pd import numpy as np 使用技巧1-创建DataFrame数据 方式1:自己直接创建 df1 = pd.DataFrame({ "name":["小明","小红","小孙","王小","关宇","刘蓓","张菲"], "age":[20,18,27,20

尤尔小屋 800

ArcGIS与地理加权回归GWR【一】

因此,在实际问题研究中我们经常发现回归参数在不同地理位置上往往表现为不同,也就是说回归参数随地理位置变化,这时如果仍然采用全局空间回归模型(全局假设β是不会变得),得到的回归参数估计将是回归参数在整个研究区域内的平均值,如上所说某一个因素在ABC等不同的地理位置对房价的影响是不同的,假如采用全局空间回归模型,便忽略了数据的空间位置属性,只反映平均意义下因变量与自变量的相关关系,而不能有效反映回归关系的空间非平稳性的特征。当自变量为1个时,是一元线性回归,自变量为2个及以上时,称为多元线性回归。

JData_Engineer的博客 1375

非常全面的Pandas入门教程

pandas是基于NumPy的一种数据分析工具,在机器学习任务中,我们首先需要对数据进行清洗和编辑等工作,pandas库大大简化了我们的工作量,熟练并掌握pandas常规用法是正确构建机器学习模型的第一步。 目录 如何安装pandas 如何导入pandas库和查询相应的版本信息 pandas数据类型 series教程 dataframe教程 小结 1. 如何安装Pandas 最常用的方法是通过...

weixin_44489066的博客 5万+

贝叶斯地理统计模型R-INLA-1

贝叶斯地理统计模型R-INLA-1

学习中 2426

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【Python 零基础入门】Pandas

深入探索 Python 的 Pandas 库:从核心数据结构到高级特性,本指南为你提供了全面的 Pandas 知识概览。无论你是数据初学者还是专家,都可在此找到宝贵的 insights 和技巧,助力你的数据处理与分析工作。

我是小白呀的博客 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

import pandas as pd什么意思_Pandas数据分析从分析到入门

点击上方“Python之旅”,星标公众号分享好玩的信息来源:雪山飞猪Pandas数据分析从放弃到入门目录什么是Pandas一、如何读取数据库-read_sql二、如何筛选数据三、如何连表-merge四、如何删除一行或一列-drop五、如何分组统计-groupyby六、如何排序-sort_values/sort_index七、如何重建索引-groupby(as_index=False)/r...

weixin_39786534的博客 4万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Python之一文入门Pandas

本文介绍了Python数据分析库Pandas的核心数据结构Series。主要内容包括: Series概述:一维数据结构,包含索引(index)和值(values),类似Excel列数据; 创建方法:通过列表、标量值、字典和ndarray四种方式创建Series,并说明index参数的作用; 基本操作:包括数据获取(values/index访问)、数据访问(in/索引/位置/get方法)、缺失值检测和切片操作; 特性:支持向量化操作,具有类似NumPy的广播机制。Series作为Pandas基础数据结构,为数

空名的博客——云深知处 1315

提升效率,这十个Pandas技巧必不可少!

Pandas 是一个被广泛使用,用于处理结构化数据的 Python 包。虽然已经有很多优质的教程供大家学习,但这次我还是想给大家介绍一些很酷的、可能还不为大家熟悉的技巧,我相信这些小技巧会提升大家处理数据时的效率。 1、read_csv 大家都知道这个命令。但是,如果你要读取的数据量很大时,你可以尝试使用一下这个参数:nrows = 5。在实际加载整个数据表之前,只读取表的一小部分。然后,您可...

python学习者的博客 791

数据分析之Pandas 基础入门

在 CSV 文件中指定了一个列,然后使用index_col可以实现自定义索引。

zhouzhiwengang的专栏 5000
上一篇: 如何用Python开发QQ机器人
下一篇: 卧槽!逆天了,Python竟然能打造一款扫描全能王,实现图片纠正!
菜鸟学Python
博客等级 码龄9年 8084粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值