前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pandas使用技巧总结

pandas使用技巧总结

原创
作者头像
皮大大
修改2021-03-10 17:46:37
6360
修改2021-03-10 17:46:37
举报

pandas使用技巧总结

总结自己经常使用的pandas操作技巧:

  • 创建DataFrame数据
  • 查看数据相关信息
  • 查看头尾文件
  • 花样取数
  • 切片取数

<!--MORE-->

导入包

代码语言:txt
复制
import pandas as pd
import numpy as np

创建DataFrame数据

方式1:自己直接创建

代码语言:txt
复制
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()读进来:

代码语言:txt
复制
df2 = pd.read_excel("学生信息.xlsx")
df2

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

使用技巧1-查看数据相关信息

查看数据shape

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

代码语言:txt
复制
df1.shape  # (7,5)
查看字段属性名称
代码语言:txt
复制
df1.columns
查看属性的数据类型
代码语言:txt
复制
df1.dtypes

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

查看数据是否缺失
代码语言:txt
复制
df1.isnull()   # 如果缺失显示为True,否则显示False
代码语言:txt
复制
df1.isnull().sum() # 统计缺失值的个数。一个True计数一次

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

查看数据行索引
代码语言:txt
复制
df1.index
查看数据描述信息
代码语言:txt
复制
df1.describe
查看数据统计值

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

代码语言:txt
复制
df1.describe()

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

使用技巧2-查看头尾文件

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

head
代码语言:txt
复制
df1.head()   # 默认是查看前5行数据
df1.head(3)  # 指定显示的行数
tail
代码语言:txt
复制
df1.tail()    # 默认尾部5行
df1.tail(3)   # 指定尾部3行数据

使用技巧3-花样取数

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

取出某个字段的数据

我们取出name这列的数据:

代码语言:txt
复制
name = df1["name"]
name

# 结果
0    小明
1    小红
2    小孙
3    王小
4    关宇
5    刘蓓
6    张菲
Name: name, dtype: object
取出多个字段的数据

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

代码语言:txt
复制
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、选择单个数据类型

代码语言:txt
复制
# 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、同时选择多个类型

代码语言:txt
复制
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、选择排除某些数据类型之外的数据:

代码语言:txt
复制
# 选择除了int64类型之外的数据
# 排除name和score字段之外的数据
df1.select_dtypes(exclude='int64') 

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

1、直接通过判断大小来取数:

代码语言:txt
复制
df1[df1["age"] == 20]  # 年龄等于20
df1[df1["age"] != 20]  # 年龄不等于20
df1[df1["age"] >= 20]  # 年龄大于等于20

2、多个判断条件连用

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

代码语言:txt
复制
df1[(df1["age"] >= 20) & (df1["age"] < 27)]
根据字符串取数

1、通过单个条件取数

代码语言:txt
复制
# 1、单条数据
df1[df1["name"] == "小明"]  

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

2、通过多个条件取数

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

代码语言:txt
复制
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)
代码语言:txt
复制
# 1、取出以“小”开头的姓名
df1[df1["name"].str.startswith("小")]  # name以"小"开头

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

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

# 结果
  name  age sex  score address
6	张菲	 25  女	  701	  长沙
代码语言:txt
复制
# 取出包含“小”的数据:不管小是在开头,还是结尾都会被选出来
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个人名字中没有小字。

代码语言:txt
复制
# 取出不包含小的数据
df1[~df1["name"].str.contains("小")]

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

使用技巧4-切片取数

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

  • start:起始索引,包含
  • stop:结束索引,不包含
  • step:步长,可正可负;

写法为:start:stop:step

步长为正数

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

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

代码语言:txt
复制
df1[4:]  # 从索引4开始取到末尾

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

3、改变步长的值

代码语言:txt
复制
df1[0:4:2]  # 改变步长:每隔2个值取一行数据

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

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

代码语言:txt
复制
df1[:4:2]  # 默认从0开始

4、只指定步长

代码语言:txt
复制
df1[::2]   # 从头到尾,步长为2

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

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

代码语言:txt
复制
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、步长为负,指定起始和终止索引,起始索引大于终止索引

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

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • pandas使用技巧总结
  • 导入包
  • 创建DataFrame数据
  • 使用技巧1-查看数据相关信息
    • 查看数据shape
      • 查看字段属性名称
        • 查看属性的数据类型
          • 查看数据是否缺失
            • 查看数据行索引
              • 查看数据描述信息
                • 查看数据统计值
                • 使用技巧2-查看头尾文件
                  • head
                    • tail
                    • 使用技巧3-花样取数
                      • 取出某个字段的数据
                        • 取出多个字段的数据
                          • 根据字段类型选择数据
                            • 根据数值大小取数
                              • 根据字符串取数
                              • 使用技巧4-切片取数
                                • 步长为正数
                                  • 步长为负数
                                  领券
                                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档