DataFrame按条件筛选、修改数据:df.loc[]拓展 | 您所在的位置:网站首页 › dataframe筛选数据 › DataFrame按条件筛选、修改数据:df.loc[]拓展 |
零基础学Python数据分析 >> Pandas >> DataFrame按条件筛选、修改数据拓展:df.loc[]拓展 前言大家好,这里是零基础学Python数据分析系列。 这个系列所有的代码编写均是Python3版本。 喜欢的朋友们可以点个关注,有问题欢迎随时和我交流。 之前我们学习了如何对DataFrame进行切片,其中df.loc[]可以按某列条件筛选行数据,本章我们就拓展一下df.loc[]按某列条件筛选行数据,内容如下: (1)df.loc[]按某列条件筛选行数据。 (2)df.loc[]按某列条件筛选并修改行数据。 (3)筛选条件常用:判断某列数据中是否包含特定字符串(或字符串列表)。 先通过字典创建一个学生信息的DataFrame。 输入: import pandas as pd Student_dict = {'姓名':['张三', '李四', '王五', '赵六'], '性别':['男', '女', '男', '女'], '年龄':[20, 21, 19, 18], 'Python成绩':[70, 80, 90, 50], '评价':['良好', '良好', '良好', '良好'], '地址':['A小区10幢', 'A小区11幢','B小区10幢','C小区11幢']} # 字典创建DataFrame,字典键变DataFrame的列名 df = pd.DataFrame(data=Student_dict, index=['a','b','c','d']) df输出: df.loc[]可以通过布尔列表筛选行数据。比如筛选前两行数据: 输入: df.loc[[True, True, False, False]]输出: 通过布尔列表的方式,可以衍生出下面按条件的选取方式。比如筛选Python成绩>75的学生: 输入: df.loc[df['Python成绩'] > 75] # df.loc[]删选Python成绩>75的学生输出: 除了单个条件,也可以用两个条件筛选数据。比如筛选Python成绩>75的学生,并且年龄>20的学生: 输入: df.loc[(df['Python成绩'] > 75) & (df['年龄'] > 20)] # df.loc[]删选Python成绩>75的学生,并且年龄>20的学生输出: 注:df.loc[]多条件删选数据时,不同条件需要用(),连接条件如果是且符号是'&',连接条件如果是或符号是'|'。 df.loc[]按某列条件筛选并修改行数据上面我们学习了如何筛选数据,那么如何筛选并改变数据呢? 日常工作中我们常常需要通过某个条件,去改变DataFrame数据。 比如,我想把Python成绩>=90的学习,评价设置为'优秀': 输入: df.loc[df['Python成绩'] >= 90, '评价'] = '优秀' df输出: df.loc[]筛选并改变数据,需要输入两个参数: 参数1:筛选的条件。 参数2:要改变列的列名。 判断某列数据中是否包含特定字符串或字符串列表拓展一下df.loc[]筛选数据时常用的条件,判断某列数据中是否包含特定字符串或字符串列表。 比如我想筛选地址包含'A小区'的学生,应该怎么操作? 比如我想筛选地址包含'A小区'或'B小区'的学生,应该怎么操作? 判断某列数据中是否包含特定字符串筛选地址包含'A小区'的学生: 输入; df.loc[df['地址'].str.contains('A小区')] # df.loc[]删选地址中包含A小区的学生输出: df['地址'].str.contains('A小区')说明: df['地址'].str,就是对df['地址']进行str操作,str下有很多很多方法,其中contains()是其中一种方法,作用是用来判断是否包含'A小区'。 df['xx'].str除了contains方法外,还有cat、split、partition、rpartition、get、slice、slice_replace、join、startswith、endswith、match、replace、repeat、pad、zfill等等方法。 判断某列数据中是否包含特定字符串列表筛选地址包含'A小区'或'B小区'的学生: 聪明的同学会想到先获取'A小区'的学生,再获取'B小区'的学生,这是可行的。 不过怎样可以一步实现呢?直接放入列表行不行?让我们来试一下。 直接放入列表试试: 输入: xiaoqu_list = ['A小区', 'B小区'] df.loc[df['地址'].str.contains(xiaoqu_list)]输出: TypeError: unhashable type: 'list'报错啦,不支持输入列表。 解决方法是将列表用'|'进行连接,这样就可以一次性筛选出来了。 输入: xiaoqu_list = ['A小区', 'B小区'] xiaoqu_str = '|'.join(xiaoqu_list) df[df['地址'].str.contains(xiaoqu_str)]输出: 说明: '|'.join(xiaoqu_list),是将xiaoqu_list列表用'|'拼接起来,生成一个str字符串。然后就可以一次性筛选地址包含'A小区'或'B小区'的学生了。 以上就是DataFrame按条件筛选、修改数据:df.loc[]的拓展内容啦,如果觉得不错,大家记得动动小手帮我点个赞呀,这对我很重要! DataFrame合集: 创建DataFrame:ColorfulRain0807:Pandas的利剑DataFrame创建 从excel中加载DataFrame:ColorfulRain0807:加载excel和csv表为DataFrame 查看DataFrame数据详情:ColorfulRain0807:如何快速熟悉DataFrame数据详情? DataFrame的一些常用操作:ColorfulRain0807:DataFrame常用操作!干货满满! DataFrame切片:ColorfulRain0807:一文详解DataFrame中df[]、df.iloc[]、df.loc[]、df.ix[]、df.iat[]、df.at[]的区别 |
CopyRight 2018-2019 实验室设备网 版权所有 |