社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

【Python】20个Pandas数据实战案例,干货多多

机器学习初学者 • 3 年前 • 463 次点击  
今天我们讲一下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   赵云    健身
往期精彩回顾






Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/127831
 
463 次点击