20个Pandas数据实战案例,干货多多
作者:俊欣
来源:关于数据分析与可视化
今天我们讲一下 pandas 当中的数据过滤内容,小编之前也写过也一篇相类似的文章,但是是基于文本数据的过滤,大家有兴趣也可以去查阅一下。
下面小编会给出大概20个案例来详细说明数据过滤的方法,首先我们先建立要用到的数据集,代码如下 import pandas as pd df = pd.DataFrame({ "name": ["John","Jane","Emily","Lisa","Matt"], "note": [92,94,87,82,90], "profession":["Electrical engineer","Mechanical engineer", "Data scientist","Accountant","Athlete"], "date_of_birth":["1998-11-01","2002-08-14","1996-01-12", "2002-10-24","2004-04-05"], "group":["A","B","B","A","C"] })
output name note profession date_of_birth group 0 John 92 Electrical engineer 1998-11-01 A 1 Jane 94 Mechanical engineer 2002-08-14 B 2 Emily 87 Data scientist 1996-01-12 B 3 Lisa 82 Accountant 2002-10-24 A 4 Matt 90 Athlete 2004-04-05 C 筛选表格中的若干列
代码如下 df[["name","note"]]
output name note 0 John 92 1 Jane 94 2 Emily 87 3 Lisa 82 4 Matt 90 再筛选出若干行
我们基于上面搜索出的结果之上,再筛选出若干行,代码如下 df.loc[:3, ["name","note"]]
output name note 0 John 92 1 Jane 94 2 Emily 87 3 Lisa 82 根据索引来过滤数据
这里我们用到的是 iloc 方法,代码如下 df.iloc[:3, 2]
output 0 Electrical engineer 1 Mechanical engineer 2 Data scientist 通过比较运算符来筛选数据df[df.note > 90]
output name note profession date_of_birth group 0 John 92 Electrical engineer 1998-11-01 A 1 Jane 94 Mechanical engineer 2002-08-14 B dt属性接口
dt 属性接口是用于处理时间类型的数据的,当然首先我们需要将字符串类型的数据,或者其他类型的数据转换成事件类型的数据,然后再处理,代码如下 df.date_of_birth = df.date_of_birth.astype("datetime64[ns]") df[df.date_of_birth.dt.month==11]
output name note profession date_of_birth group 0 John 92 Electrical engineer 1998-11-01 A
或者我们也可以 df[df.date_of_birth.dt.year > 2000]
output name note profession date_of_birth group 1 Jane 94 Mechanical engineer 2002-08-14 B 3 Lisa 82 Accountant 2002-10-24 A 4 Matt 90 Athlete 2004-04-05 C 多个条件交集过滤数据
当我们遇上多个条件,并且是交集的情况下过滤数据时,代码应该这么来写 df[(df.date_of_birth.dt.year > 2000) & (df.profession.str.contains("engineer"))]
output name note profession date_of_birth group 1 Jane 94 Mechanical engineer 2002-08-14 B 多个条件并集筛选数据
当多个条件是以并集的方式来过滤数据的时候,代码如下 df[(df.note > 90) | (df.profession=="Data scientist")]
output name note profession date_of_birth group 0 John 92 Electrical engineer 1998-11-01 A 1 Jane 94 Mechanical engineer 2002-08-14 B 2 Emily 87 Data scientist 1996-01-12 B Query方法过滤数据
Pandas 当中的query 方法也可以对数据进行过滤,我们将过滤的条件输入 df.query("note > 90")
output name note profession date_of_birth group 0 John 92 Electrical engineer 1998-11-01 A 1 Jane 94 Mechanical engineer 2002-08-14 B
又或者是 df.query("group=="A" and note > 89")
output name note profession date_of_birth group 0 John 92 Electrical engineer 1998-11-01 A nsmallest方法过滤数据
pandas 当中的nsmallest 以及nlargest 方法是用来找到数据集当中最大、最小的若干数据,代码如下 df.nsmallest(2, "note")
output name note profession date_of_birth group 3 Lisa 82 Accountant 2002-10-24 A 2 Emily 87 Data scientist 1996-01-12 B df.nlargest(2, "note")
output name note profession date_of_birth group 1 Jane 94 Mechanical engineer 2002-08-14 B 0 John 92 Electrical engineer 1998-11-01 A isna()方法
isna() 方法功能在于过滤出那些是空值的数据,首先我们将表格当中的某些数据设置成空值 df.loc[0, "profession"] = np.nan df[df.profession.isna()]
output name note profession date_of_birth group 0 John 92 NaN 1998-11-01 A notna()方法
notna() 方法上面的isna() 方法正好相反的功能在于过滤出那些不是空值的数据,代码如下 df[df.profession.notna()]
output name note profession date_of_birth group 1 Jane 94 Mechanical engineer 2002-08-14 B 2 Emily 87 Data scientist 1996-01-12 B 3 Lisa 82 Accountant 2002-10-24 A 4 Matt 90 Athlete 2004-04-05 C assign方法
pandas 当中的assign 方法作用是直接向数据集当中来添加一列 df_1 = df.assign(score=np.random.randint(0,100,size=5)) df_1
output name note profession date_of_birth group score 0 John 92 Electrical engineer 1998-11-01 A 19 1 Jane 94 Mechanical engineer 2002-08-14 B 84 2 Emily 87 Data scientist 1996-01-12 B 68 3 Lisa 82 Accountant 2002-10-24 A 70 4 Matt 90 Athlete 2004-04-05 C 39 explode方法
explode() 方法直译的话,是爆炸的意思,我们经常会遇到这样的数据集 Name Hobby 0 吕布 [打篮球, 玩游戏, 喝奶茶] 1 貂蝉 [敲代码, 看电影] 2 赵云 [听音乐, 健身]
Hobby 列当中的每行数据都以列表的形式集中到了一起,而explode() 方法则是将这些集中到一起的数据拆开来,代码如下 Name Hobby 0 吕布 打篮球 0 吕布 玩游戏 0 吕布 喝奶茶 1 貂蝉 敲代码 1 貂蝉 看电影 2 赵云 听音乐 2 赵云 健身
当然我们会展开来之后,数据会存在重复的情况, df.explode("Hobby").drop_duplicates().reset_index(drop=True)
output Name Hobby 0 吕布 打篮球 1 吕布 玩游戏 2 吕布 喝奶茶 3 貂蝉 敲代码 4 貂蝉 看电影 5 赵云 听音乐 6 赵云 健身