大家好,我是Python之眼。 今天来跟大家分享 Pandas 的一些常用知识点,文章内容由公众号读者 Peter 创作。 如果你用 Python 做数据分析,必然会绕不过 Pandas 的使用,实际上, Python 也是由于 numpy、pandas 等数据科学库的出现,才开始在数据科学领域实现了快速的发展,因此,学好 Pandas 有很重要的现实意义。 本文总结自己经常使用的pandas操作方法:
首先,导入包 import pandas as pdimport numpy as np 01 创建DataFrame数据方式1:通过字典直接创建
数据如下图: 方式2:通过本地数据读取从本地文件中读取进来。现在本地有一个文件:学生信息.xlsx直接通过pd.read_excel()读进来: df2 = pd.read_excel('学生信息.xlsx')df2 可以看到效果和上面是一样的 02 数据探索查看数据shapeshape表示数据是由多少行和列组成:
查看字段属性名称df1.columns 查看属性的数据类型
可以看到只有两种数据类型:int64和object 查看数据是否缺失df1.isnull() # 如果缺失显示为True,否则显示False
结果显示:本次数据是没有缺失值的 查看数据行索引df1.index 查看数据描述信息
查看数据统计值统计值信息只会显示类型为数值型的数据统计值信息: df1.describe() 统计值的结果包含:个数count、均值mean、方差std、最值min\max、四分位数25%、中位数50%、四分之三分位数75%。 03 查看头尾文件通过head和tail方法能够快速查看数据的头尾文件。 head
taildf1.tail() # 默认尾部5行df1.tail(3) # 指定尾部3行数据 04 花样取数从pandas的DataFrame数据框中取出我们想要的数据,然后进行处理 取出某个字段的数据我们取出name这列的数据:
取出多个字段的数据比如我们取出name和age列的数据: name_age = df1[['name','age']] name_age# 结果 name age0 小明 201 小红 182 小孙 273 王小 204 关宇 285 刘蓓 186 张菲 25 根据字段类型选择数据比如,我们想选择字段类型为int64的数据,通过查看的字段数据类型显示:age和score都是int64类型 1、选择单个数据类型
2、同时选择多个类型df1.select_dtypes(include=['int64','object'])# 结果 name age sex score address0 小明 20 男 669 北京1 小红 18 女 570 深圳2 小孙 27 男 642 广州3 王小 20 男 590 武汉4 关宇 28 男 601 深圳5 刘蓓 18 女 619 广州6 张菲 25 女 701 长沙 因为数据中只有int64,object,所以我们全部选出来了。 3、选择排除某些数据类型之外的数据:
根据数值大小取数1、直接通过判断大小来取数:df1[df1['age'] == 20] # 年龄等于20df1[df1['age'] != 20] # 年龄不等于20df1[df1['age'] >= 20] # 年龄大于等于20 2、多个判断条件连用第一次使用上面的方法报错:关键词是ambiguous。判断条件很让pandas混淆,改成下面的写法成功解决:
![]() 根据字符串取数1、通过单个条件取数# 1、单条数据df1[df1['name'] == '小明'] # 结果 name age sex score address0 小明 20 男 669 北京 2、通过多个条件取数选择姓名是小明,或者年龄大于25的数据
3、字符串的开始、结尾、包含函数
# 1、取出以“小”开头的姓名df1[df1['name'].str.startswith('小')] # name以'小'开头# 结果 name age sex score address0 小明 20 男 669 北京1 小红 18 女 570 深圳2 小孙 27 男 642 广州
# 3、以“菲”结尾df1[df1['name'].str.endswith('菲')]# 结果 name age sex score address6 张菲 25 女 701 长沙
上面的王小不是小开头,但是包含小,所以也被选出来。 4、字符串取反操作取反符号是波浪线:~ 下面的例子是:取出名字name中不包含小的数据,只有3个人名字中没有小字。 # 取出不包含小的数据df1[~df1['name'].str.contains('小')]# 结果 name age sex score address4 关宇 28 男 601 深圳5 刘蓓 18 女 619 广州6 张菲 25 女 701 长沙 05 切片取数切片是Python中存在的概念,在pandas中同样可以使用。切片中存在3个概念:start、stop、step
写法为:[start:stop:step] 如果大家在学习中遇到困难,想找一个python学习交流环境,可以加入我们一起学习,关注小编,并私信“01”即可领取python学习资料,会节约很多时间,减少很多遇到的难题。 步长为正数1、通过下面的3个案例说明:起始索引默认从0开始,步长默认是1 ![]() ![]() 2、指定起始索引,不指定结束索引,表示一直取到数据末尾
3、改变步长的值 df1[0:4:2] # 改变步长:每隔2个值取一行数据# 结果 name age sex score address0 小明 20 男 669 北京2 小孙 27 男 642 广州 上面的例子不指定起始索引:
4、只指定步长 df1[::2] # 从头到尾,步长为2# 结果 name age sex score address0 小明 20 男 669 北京2 小孙 27 男 642 广州4 关宇 28 男 601 深圳6 张菲 25 女 701 长沙 步长为负数1、步长为-1,默认是倒序输出结果
2、步长为负,指定起始和终止索引,起始索引大于终止索引 df1[4:0:-1] name age sex score address4 关宇 28 男 601 深圳3 王小 20 男 590 武汉2 小孙 27 男 642 广州1 小红 18 女 570 深圳 3、起始和终止索引为负数
06 常用函数统计元素个数很多时候我们需要统计某个列中每个元素出现的个数,相当于是做词频统计,使用:value_counts()方法,具体案例为: ⚠️:新数据中df1增加了一列:班级class,后续有作用 ![]() 比如我们想统计每个城市出现了多少次: # 统计中每个城市各出现了多少次address = df1['address'].value_counts()address ![]() 结果自动是降序排列的Series类型数据 索引重置索引重置使用reset_index():
![]() 还比如我们想从数据中单独取出sex='男'的数据: fale = df1[df1['sex'] == '男']fale ![]() 我们观察到数据前面的索引还是原来的,但是我们希望的是从0开始显示,比较符合我们的习惯:
![]() 出现的结果中索引是我们想要的结果,但是出现了一列新的数据,就是原来的索引构成的数据,这不是我们想要的数据,需要去除: fale_1 = fale.reset_index(drop=True) # 加上参数即可解决fale_1 ![]() 属性重命名使用的是rename函数,传入columsn参数:
![]() groupby使用groupby主要是实现分组统计的功能: 1、比如我们想统计男女各自的总分 ![]() # 统计男女的总成绩:sumsex_score = df1.groupby('sex')['score'].sum()sex_score ![]() 2、求男女各自的平均分mean
![]() 3、根据男女性别sex、班级class求总分 # 先根据性别、班级求总分sex_class = df1.groupby(['sex','class'])['score'].sum()sex_class ![]() 一行代码实现上面的功能:
![]() apply函数还是上面的df1数据集: ![]() 1、需求1:我们想将性别中的男变成1,女变成0 # 1、改变:男-1,女-0df2 = df1.copy() # 生成一个副本df2['sex'] = df2['sex'].apply(lambda x: 1 if x=='男' else 0) # 通过匿名函数解决df2 ![]() 我们还可以自定义一个函数来实现:
![]() 2、还比如我们想给每个城市的后面加上一个“市”,变成北京市、深圳市等: # 2、给每个城市加上一个字:市,变成北京市、深圳市等df4 = df1.copy()df4['address'] = df4['address'].apply(lambda x: x + '市')df4 ![]() 总结本文中从pandas中DataFrame数据的创建,常见数据信息的探索,再到如何从数据框中获取到我们指定的数据,最后介绍了笔者常用的处理数据的方法,希望对入门或者对不熟悉pandas的朋友有所帮助。Pandas真的是十分强大,学好之后会大大节省我们处理数据的时间。 最后多说一句,小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取。 |
|
来自: copy_left > 《python常用模块》