前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python进阶之Pandas入门(五) 数据流切片,选择,提取

Python进阶之Pandas入门(五) 数据流切片,选择,提取

作者头像
HuangWeiAI
发布2020-02-13 15:36:01
1.7K0
发布2020-02-13 15:36:01
举报
文章被收录于专栏:浊酒清味浊酒清味

前言

Pandas是数据分析中一个至关重要的库,它是大多数据项目的支柱。如果你想从事数据分析相关的职业,那么你要做的第一件事情就是学习Pandas。

到目前为止,我们主要关注数据的一些基本总结。我们已经学习了使用单括号进行简单的列提取,并且使用fillna()在列中输入null值。下面是您需要经常使用的其他切片、选择和提取方法。

列提取

在开始之前,我们先把数据集导入进来:

代码语言:javascript
复制
import pandas as pd

movies_df = pd.read_csv("IMDB-Movie-Data.csv", index_col="Title")
movies_df.columns = [col.lower() for col in movies_df]

需要注意的是,尽管许多方法是相同的,但DataFrames和Series具有不同的属性,因此您需要确保知道使用的是哪种类型,否则将收到属性错误的结果。

您已经看到如何使用方括号提取列,像这样:

代码语言:javascript
复制
genre_col = movies_df['genre']
print (type(genre_col))

运行结果:

代码语言:javascript
复制
pandas.core.series.Series

这将返回一个Series。要将列提取为DataFrame,需要传递的是列表。看看这个例子:

代码语言:javascript
复制
genre_col = movies_df[['genre']]
print (type(genre_col))

运行结果:

代码语言:javascript
复制
pandas.core.frame.DataFrame

因为它是一个列表,所以再添加另一个列很容易做到:

代码语言:javascript
复制
subset = movies_df[['genre', 'rating']]
subset.head()

运行结果:

genre

rating

Title

Guardians of the Galaxy

Action,Adventure,Sci-Fi

8.1

Prometheus

Adventure,Mystery,Sci-Fi

7.0

Split

Horror,Thriller

7.3

Sing

Animation,Comedy,Family

7.2

Suicide Squad

Action,Adventure,Fantasy

6.2

行提取

对于行,我们有两个选项:

.loc -按名称定位

.iloc-通过数值索引定位

请记住,我们仍然是通过电影标题索引的,所以为了使用.loc,我们需要给它一个电影的标题(普罗米修斯):

代码语言:javascript
复制
prom = movies_df.loc["Prometheus"]
print (prom)

运行结果:

代码语言:javascript
复制
rank                                                                2
genre                                        Adventure,Mystery,Sci-Fi
description         Following clues to the origin of mankind, a te...
director                                                 Ridley Scott
actors              Noomi Rapace, Logan Marshall-Green, Michael Fa...
year                                                             2012
runtime                                                           124
rating                                                              7
votes                                                          485820
revenue_millions                                               126.46
metascore                                                          65

另一方面,我们用iloc通过数字索引提取普罗米修斯的信息:

代码语言:javascript
复制
prom = movies_df.iloc[1]

可以将lociloc看作类似于Pythonlist切片。为了进一步说明这一点,我们选择多行。

你会如何使用列表呢?在Python中,只需使用像example_list[1:4]这样的括号进行切片。在pandas身上也是一样的:

代码语言:javascript
复制
movie_subset = movies_df.loc['Prometheus':'Sing']
movie_subset = movies_df.iloc[1:4]
print (movie_subset)

运行结果:

条件筛选

我们已经讨论了如何选择列和行,但是如果我们想要进行条件选择呢?

例如,如果我们想要过滤我们的movies DataFrame来只显示Ridley Scott导演的电影或评分大于或等于8.0的电影,该怎么办?

为此,我们从DataFrame获取一个列,并对其应用一个布尔条件。下面是一个布尔条件的例子:

代码语言:javascript
复制
movies_df[movies_df['director'] == "Ridley Scott"]

运行结果:

isnull()类似,它返回Series真值和假值:对于雷德利·斯科特导演的电影为真,对于非雷德利·斯科特导演的电影为假。

我们想过滤掉所有不是雷德利·斯科特导演的电影,换句话说,我们不想要假电影。要返回条件为True的行,我们必须将这个操作传递到DataFrame:

代码语言:javascript
复制
movies_df[movies_df['director'] == "Ridley Scott"]

运行结果:

让我们看看条件选择使用数值过滤Dataframe打分:

代码语言:javascript
复制
movies_df[movies_df['rating'] >= 8.6].head(3)

运行结果:

我们可以使用逻辑运算符来生成更丰富的条件语句,比如“or”和&“and”。

让我们只显示克里斯托弗·诺兰(Christopher Nolan)或雷德利·斯科特(Ridley Scott)的电影:

代码语言:javascript
复制
movies_df[(movies_df['director'] == 'Christopher Nolan') | (movies_df['director'] == 'Ridley Scott')].head()

运行结果:

参考:

Python Pandas Tutorial: A Complete Introduction for Beginners https://www.learndatasci.com/tutorials/python-pandas-tutorial-complete-introduction-for-beginners/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python与机器学习之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Prometheus 监控服务
Prometheus 监控服务(TencentCloud Managed Service for Prometheus,TMP)是基于开源 Prometheus 构建的高可用、全托管的服务,与腾讯云容器服务(TKE)高度集成,兼容开源生态丰富多样的应用组件,结合腾讯云可观测平台-告警管理和 Prometheus Alertmanager 能力,为您提供免搭建的高效运维能力,减少开发及运维成本。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档