前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python进阶之Pandas入门(三) 最重要的数据流操作

Python进阶之Pandas入门(三) 最重要的数据流操作

作者头像
HuangWeiAI
发布2019-12-25 17:05:59
2.6K0
发布2019-12-25 17:05:59
举报
文章被收录于专栏:浊酒清味浊酒清味

引言

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

通过这一课,您将会:

1、学会使用head()和tail()函数浏览数据;

2、学会使用info()和shape函数查看数据信息;

3、处理冗余数据。

查看你的数据

让我们加载IMDB电影数据集开始

数据集来源于Kaggle,大家可以注册账号去下载,或者联系我 https://www.kaggle.com/PromptCloudHQ/imdb-data/data

代码语言:javascript
复制
movies_df = pd.read_csv("IMDB-Movie-Data.csv", index_col="Title")

我们从CSV中加载这个数据集,并将电影标题指定为我们的索引。

打开新数据集时要做的第一件事是打印出几行以作为可视参考。我们使用.head()来完成这个任务:

代码语言:javascript
复制
print (movies_df.head())

运行结果:

.head()默认输出DataFrame的前五行,但是我们也可以传递一个数字:例如,movies_df.head(10)将输出前十行。

要查看最后五行,请使用.tail().tail()也接受一个数字,在这种情况下,我们打印下面两行:

代码语言:javascript
复制
print (movies_df.tail(2))

运行结果:

通常,当我们加载数据集时,我们喜欢查看前五行左右的内容,以了解隐藏在其中的内容。在这里,我们可以看到每一列的名称、索引和每行中的值示例。

您将注意到,DataFrame中的索引是Title列,您可以通过单词Title比其他列稍微低一些的方式看出这一点。

获取数据信息

.info()应该是加载数据后运行的其中一个命令:

代码语言:javascript
复制
movies_df.info()

运行结果:

代码语言:javascript
复制
<class 'pandas.core.frame.DataFrame'>Index: 1000 entries, Guardians of the Galaxy to Nine LivesData columns (total 11 columns):Rank                  1000 non-null int64
Genre                 1000 non-null object
Description           1000 non-null object
Director              1000 non-null object
Actors                1000 non-null object
Year                  1000 non-null int64
Runtime (Minutes)     1000 non-null int64
Rating                1000 non-null float64
Votes                 1000 non-null int64
Revenue (Millions)    872 non-null float64
Metascore             936 non-null float64
dtypes: float64(3), int64(4), object(4)
memory usage: 93.8+ KB

.info()提供关于数据集的基本细节,比如行和列的数量、非空值的数量、每个列中的数据类型以及DataFrame使用了多少内存。

请注意,在我们的movies数据集中,RevenueMetascore列中有一些明显的缺失值。我们将在下一讲中处理这个问题。

快速查看数据类型实际上非常有用。假设您刚刚导入了一些JSON,而这些整数被记录为字符串。你去做一些算术,发现一个“不支持的操作数”异常,因为你不能用字符串做算术。调用.info()会很快指出,您认为所有的整数实际上都是字符串对象。

另一个快速而有用的属性是.shape,它只输出一个元组(行、列):

代码语言:javascript
复制
print (movies_df.shape)

运行结果:

代码语言:javascript
复制
(1000, 11)

注意,.shape没有括号,它是一个简单的格式元组(行、列)。我们的movies DataFrame中有1000行和11列。

在清理和转换数据时,您将需要经常使用.shape。例如,您可能会根据一些条件过滤一些行,然后想要快速知道删除了多少行。

处理重复

这个数据集没有重复的行,但是确认您没有聚合重复的行总是很重要的。

为了演示,让我们简单地把我们的movies DataFrame加倍,将它附加到自身:

代码语言:javascript
复制
temp_df = movies_df.append(movies_df)
print (temp_df.shape)

运行结果:

代码语言:javascript
复制
(2000, 11)

使用append()将返回一个副本,而不会影响原始的DataFrame。我们用temp捕获这个副本,所以我们不处理实际数据。

通过调用.shape很快就证明了我们的DataFrame行增加了一倍。

现在我们可以尝试删除重复:

代码语言:javascript
复制
temp_df = temp_df.drop_duplicates()
print (temp_df.shape)

append()一样,drop_duplicates()方法也将返回数据DataFrame的一个副本,但这次删除了副本。调用.shape确认我们回到了原始数据集的1000行。

在本例中,将DataFrames分配给相同的变量有点冗长。因此,pandas的许多方法上都有inplace关键参数。使用inplace=True将修改DataFrame对象:

代码语言:javascript
复制
temp_df.drop_duplicates(inplace=True)

现在,我们的temp_df将自动拥有转换后的数据。

drop_duplicates()的另一个重要参数是keep,它有三个可能的选项:

  1. first:(默认)删除第一次出现的重复项。
  2. last:删除最后一次出现的重复项。
  3. False:删除所有重复项。

由于我们在前面的例子中没有定义keep代码,所以它默认为first。这意味着如果两行是相同的,panda将删除第二行并保留第一行。使用last有相反的效果:第一行被删除。

另一方面,keep将删除所有重复项。如果两行是相同的,那么这两行都将被删除。看看temp_df发生了什么:

代码语言:javascript
复制
temp_df = movies_df.append(movies_df)  # make a new copy
temp_df.drop_duplicates(inplace=True, keep=False)
print (temp_df.shape)

运行结果:

代码语言:javascript
复制
(0, 11)

因为所有的行都是重复的,所以keep=False将它们全部删除,结果只剩下0行。如果您想知道为什么要这样做,一个原因是它允许您在数据集中查找所有副本。当条件选择显示在下面时,您将看到如何做到这一点。

参考:

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档