DataFrame按条件筛选、修改数据:df.loc[]拓展 您所在的位置:网站首页 dataframe筛选数据 DataFrame按条件筛选、修改数据:df.loc[]拓展

DataFrame按条件筛选、修改数据:df.loc[]拓展

2022-11-10 22:09| 来源: 网络整理| 查看: 265

零基础学Python数据分析 >> Pandas >> DataFrame按条件筛选、修改数据拓展:df.loc[]拓展

前言

大家好,这里是零基础学Python数据分析系列。

这个系列所有的代码编写均是Python3版本。

喜欢的朋友们可以点个关注,有问题欢迎随时和我交流。

之前我们学习了如何对DataFrame进行切片,其中df.loc[]可以按某列条件筛选行数据,本章我们就拓展一下df.loc[]按某列条件筛选行数据,内容如下:

(1)df.loc[]按某列条件筛选行数据。

(2)df.loc[]按某列条件筛选并修改行数据。

(3)筛选条件常用:判断某列数据中是否包含特定字符串(或字符串列表)

创建一个DataFrame

先通过字典创建一个学生信息的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[]可以通过布尔列表筛选行数据。比如筛选前两行数据:

输入:

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 实验室设备网 版权所有