引言
Pandas是数据分析中一个至关重要的库,它是大多数据项目的支柱。如果你想从事数据分析相关的职业,那么你要做的第一件事情就是学习Pandas。
通过这一课,您将会:
1、学会使用head()和tail()函数浏览数据;
2、学会使用info()和shape函数查看数据信息;
3、处理冗余数据。
查看你的数据
让我们加载IMDB电影数据集开始
数据集来源于Kaggle,大家可以注册账号去下载,或者联系我 https://www.kaggle.com/PromptCloudHQ/imdb-data/data
movies_df = pd.read_csv("IMDB-Movie-Data.csv", index_col="Title")
我们从CSV中加载这个数据集,并将电影标题指定为我们的索引。
打开新数据集时要做的第一件事是打印出几行以作为可视参考。我们使用.head()
来完成这个任务:
print (movies_df.head())
运行结果:
.head()
默认输出DataFrame的前五行,但是我们也可以传递一个数字:例如,movies_df.head(10)
将输出前十行。
要查看最后五行,请使用.tail()
。.tail()
也接受一个数字,在这种情况下,我们打印下面两行:
print (movies_df.tail(2))
运行结果:
通常,当我们加载数据集时,我们喜欢查看前五行左右的内容,以了解隐藏在其中的内容。在这里,我们可以看到每一列的名称、索引和每行中的值示例。
您将注意到,DataFrame中的索引是Title列,您可以通过单词Title比其他列稍微低一些的方式看出这一点。
获取数据信息
.info()
应该是加载数据后运行的其中一个命令:
movies_df.info()
运行结果:
<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数据集中,Revenue
和Metascore
列中有一些明显的缺失值。我们将在下一讲中处理这个问题。
快速查看数据类型实际上非常有用。假设您刚刚导入了一些JSON,而这些整数被记录为字符串。你去做一些算术,发现一个“不支持的操作数”异常,因为你不能用字符串做算术。调用.info()
会很快指出,您认为所有的整数实际上都是字符串对象。
另一个快速而有用的属性是.shape
,它只输出一个元组(行、列):
print (movies_df.shape)
运行结果:
(1000, 11)
注意,.shape
没有括号,它是一个简单的格式元组(行、列)。我们的movies DataFrame中有1000行和11列。
在清理和转换数据时,您将需要经常使用.shape
。例如,您可能会根据一些条件过滤一些行,然后想要快速知道删除了多少行。
处理重复
这个数据集没有重复的行,但是确认您没有聚合重复的行总是很重要的。
为了演示,让我们简单地把我们的movies DataFrame加倍,将它附加到自身:
temp_df = movies_df.append(movies_df)
print (temp_df.shape)
运行结果:
(2000, 11)
使用append()
将返回一个副本,而不会影响原始的DataFrame。我们用temp
捕获这个副本,所以我们不处理实际数据。
通过调用.shape
很快就证明了我们的DataFrame行增加了一倍。
现在我们可以尝试删除重复:
temp_df = temp_df.drop_duplicates()
print (temp_df.shape)
与append()
一样,drop_duplicates()
方法也将返回数据DataFrame的一个副本,但这次删除了副本。调用.shape
确认我们回到了原始数据集的1000行。
在本例中,将DataFrames分配给相同的变量有点冗长。因此,pandas的许多方法上都有inplace
关键参数。使用inplace=True
将修改DataFrame对象:
temp_df.drop_duplicates(inplace=True)
现在,我们的temp_df
将自动拥有转换后的数据。
drop_duplicates()
的另一个重要参数是keep
,它有三个可能的选项:
first
:(默认)删除第一次出现的重复项。last
:删除最后一次出现的重复项。False
:删除所有重复项。由于我们在前面的例子中没有定义keep
代码,所以它默认为first
。这意味着如果两行是相同的,panda将删除第二行并保留第一行。使用last
有相反的效果:第一行被删除。
另一方面,keep
将删除所有重复项。如果两行是相同的,那么这两行都将被删除。看看temp_df
发生了什么:
temp_df = movies_df.append(movies_df) # make a new copy
temp_df.drop_duplicates(inplace=True, keep=False)
print (temp_df.shape)
运行结果:
(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/