数据分析之Python 对Dataframe 单条件筛选、多条件筛选、过滤数据

本文详细介绍了PythonPandas库中常用的数据筛选方法,如单一条件筛选、isin函数、query函数、contains函数和loc函数,以及它们在实际数据处理中的应用场景和使用技巧。
摘要由CSDN通过智能技术生成

一、筛选方法和函数简介
1.简单的筛选方法:
1.1单一的筛选:条件范围可以是数值或字符串
df[df[“column_name”] == value]
多字段的筛选(又称为复合条件的筛选): 多个不同的特征列,并且条件可以对应不同的数值或字符串
df[(df[“column_name1”] <= value) & (df[“column_name2”] == str)]

1.2 isin函数:

df[df[“column_name”].isin(li)] (# li = [20, 25, 27] 或 li = np.arange(20, 30))
根据从isin函数传入的列表(li),筛选出与列表中包含的数值或字符串相同的数据记录, 用法有点类似sql中的"in"

1.3 query函数:

df.query("(column_name1 == ‘str1’) & (column_name2 == ‘str2’)")
根据query中引入的不同字段(str1,str2等)和条件,筛选出同时能满足这些要求的数据记录

1.4 contains函数:

df[df[“column_name”].str.contains(“str”)]
筛选出所有含有(str)的数据记录, 用法类似于sql中的"contains"

1.5 loc函数:

df.loc[df["column_name] <= value]
根据特征属性(列名)或索引标签筛选数据:df.loc[columns 筛选条件] 或df.loc[index 筛选条件];
同时根据索引标签和特征属性(列名)筛选数据:df.loc[index 筛选条件,columns 筛选条件]
                        
二、例子

2.1数据准备

数据准备:数据按行筛选(数据记录)并提取数据
import numpy as np
import pandas as pd
df = pd.DataFrame({"name": ["A001", "A002", "B001", "A001_K", "C002", "B001_K", "B001"], 
                    "protein": [25, 28, 45, 22, 60, 40, 27], 
                    "Qty": [85, 90, 75, 80, 30, 50, 30], 
                    "rank": ["1st", "1st", "1st", "2nd", "1st", "1st", "2nd"]})
print(df)

2.2实例

2.2.1简单的条件筛选:单一条件筛选

# 1 简单的条件筛选:单一条件筛选
data = df[df["protein"] <= 30]
print(data)

df.loc[df[“protein”] <= 30] 与 df[df[“protein”] <= 30]的运行结果是一样的。

2.2.2多重条件筛选 -- 筛选的条件是数值

# 2 多重条件筛选 -- 筛选的条件是数值
# 筛选并提取protein 在40-50之间的记录(符合条件)
data = df[(df["protein"] >= 40) & (df["protein"] <= 50)]
print(data)

2.2.3.多重条件筛选 -- 筛选的条件有数值和字符串

# 3 多重条件筛选 -- 筛选的条件有数值和字符串
# 筛选出蛋白质含量大于30并且产品评级为"1st"的数据
data = df[(df["protein"] >= 30) & (df["rank"] == "1st")]

2.2.4 isin 函数的使用

返回的结果是根据从isin函数传入的列表(li),筛选出与列表中包含的数值或字符串相同的数据记录, 用法有点类似sql中的"in"

# 筛选出与列表中的数值或字符串相等的数据记录
# li = np.arange(20, 30)
li = [25, 60, 45, 40]
data = df[df["protein"].isin(li)]
print(data)

2.2.5 query 函数的使用

返回的结果是根据query中引入的不同字段(str1,str2)和条件,筛选出同时能满足这些要求的数据记录

# 筛选出名称为“A001”或“B001”,并且级别都是“1st”的数据记录
data = df.query("(name=='A001'| name=='B001') & (rank == '1st')")


温馨提示:在使用query函数时,所有的表达内容都必须用引号标识出来,并且字符串的引号与表达式的引号需要区分出来(即遵从使用双引号与单引号的套用规则)。另外,特征列名称是不需要使用引号标注的,这可以理解为是直接调用了列表,因此列名称不需要注释。

2.2.6 contains 函数的使用

# 1 筛选出所有名称中还有“K”的数据记录
data = df[df["name"].str.contains("K")]
# 2 筛选出级别中含有"st", 并且名字中含有"K"的数据记录
data = df[(df["rank"].str.contains("st") & df["name"].str.contains("K"))]

2.2.7 loc 函数的使用

# 5. loc() 函数 -- 根据标签和特征列名进行数据筛选 
# 5.1 单一条件的筛选
data = df.loc[df["protein"] <=30]    # 与df[df["protein"] <=30]的运行结果是一致的!

小结:这与之前说的 df[df[“protein”] <=30] 的运行结果是一致的!

# 5.2 复合条件的筛选
# 筛选出名称为"B001"并且蛋白质含量低于30的数据记录
data = df.loc[(df["name"]=="B001") & (df["protein"]<=30)]
# 5.3 使用loc函数同时对索引标签和特征属性(列名)进行数据筛选
# 注意:当使用loc函数根据索引标签和特征列名进行筛选时,需要设定相应的索引标签。本测试会先将名称更换为索引值再进行筛选(使用set_index()函数将特征列名转换为索引值)

# 筛选出名称为"B001"的所有数据记录
test = df.copy().set_index("name")
test.loc["B001", :]
# 5.4 筛选出名称为"B001"和“A001”的蛋白质和评级数据
test_ = test.loc[["B001", "A001"], ["protein", "rank"]]
print(test_)

2.3筛选函数的搭配使用

# 1 筛选出蛋白质小于等于30,并且级别是含有"2nd"的数据记录
data = df[(df["protein"] <=30) & df["rank"].str.contains("2nd")]
data
# 2  筛选出蛋白质的含量是列表中的数值,并且名称中含有"K"的数据记录
li = [25, 60, 45, 40, 22]
data = df[(df["protein"].isin(li)) & (df["name"].str.contains("K"))]
data

 三、结束语
1.单一条件的行或列的筛选可直接使用df[columns 筛选条件] 或df[indx 筛选条件]
2.isin 函数的使用很灵活,能将多个不用的数值范围要求或字段要求通过列表的形式传入函数中进行筛选。
3.query 函数能进行多字段的筛选,但要特别注意列名的引用,以及格式的书写与其他函数不一样的地方。
4.contains 函数其实是相当与SQL 中的contains的用法,能灵活地对字符串的数据进行筛选。
5.筛选方法和函数是可以根据不同的需要被搭配在一起形成多重的条件筛选,并且使用的效果很不错!
6.如果是同时对行和列进行筛选,可使用df.loc[index 筛选条件,columns 筛选条件]

四、基础概念:loc函数与iloc函数的区别
1.loc() 函数:指Selection by label的函数
是按照标签来提取数据,标签是由2个参数决定的。
第1个参数是index: “0”-“6”; 第2个参数是column: “name”, “protein”, “Qty”, “rank” # df.loc[6, :], # df.loc[6, “protein”]
2.iloc(n, m) 函数:指Selection by Position的函数
是按位置选择数据,即第n行,第m列,只接受整数型 的参数 # df.iloc[:, 0]; #df.iloc[1, :]


                        
原文链接:https://blog.csdn.net/weixin_45914452/article/details/120585861

  • 37
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
IMDB(Internet Movie Database)是一个广泛使用的电影数据库,其中包含了大量的电影信息和评论。Python数据分析领域非常常用,可以使用Python进行IMDB电影数据集的分析。 首先,我们可以使用Python数据分析库(如Pandas)加载IMDB电影数据集。该数据集通常以CSV或JSON格式提供,可以使用Pandas的read_csv或read_json函数将其读取到DataFrame中。 一旦数据集加载到DataFrame中,我们可以使用Pandas进行各种数据分析和处理操作。例如,我们可以对电影进行基本的统计分析,如计算平均评分、电影数量、不同类型电影的数量等。这些操作可以帮助我们了解该数据集的整体特征。 此外,我们还可以根据不同的条件对电影进行筛选过滤。比如,我们可以根据电影类型、上映年份等条件筛选数据,然后进行进一步的分析。我们可以计算某个类型电影的平均评分,或者对某个特定年份的电影进行分析等。 除了Pandas,Python还有其他强大的数据分析库,如NumPy、Matplotlib和Seaborn。我们可以利用这些库进行更加深入的数据分析和可视化。比如,我们可以使用Matplotlib绘制电影评分的分布直方图,或者使用Seaborn绘制不同类型电影的评分箱线图。 总之,使用Python进行IMDB电影数据集的数据分析是一种非常有效和灵活的方式。Python数据分析库提供了丰富的工具和函数,可以帮助我们对IMDB电影数据集进行各种操作和分析,从而更好地理解和利用这些数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值