前言
Pandas是数据分析中一个至关重要的库,它是大多数据项目的支柱。如果你想从事数据分析相关的职业,那么你要做的第一件事情就是学习Pandas。
到目前为止,我们主要关注数据的一些基本总结。我们已经学习了使用单括号进行简单的列提取,并且使用fillna()在列中输入null值。下面是您需要经常使用的其他切片、选择和提取方法。
列提取
在开始之前,我们先把数据集导入进来:
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具有不同的属性,因此您需要确保知道使用的是哪种类型,否则将收到属性错误的结果。
您已经看到如何使用方括号提取列,像这样:
genre_col = movies_df['genre']
print (type(genre_col))
运行结果:
pandas.core.series.Series
这将返回一个Series。要将列提取为DataFrame,需要传递的是列表。看看这个例子:
genre_col = movies_df[['genre']]
print (type(genre_col))
运行结果:
pandas.core.frame.DataFrame
因为它是一个列表,所以再添加另一个列很容易做到:
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
,我们需要给它一个电影的标题(普罗米修斯):
prom = movies_df.loc["Prometheus"]
print (prom)
运行结果:
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
通过数字索引提取普罗米修斯的信息:
prom = movies_df.iloc[1]
可以将loc
和iloc
看作类似于Pythonlist
切片。为了进一步说明这一点,我们选择多行。
你会如何使用列表呢?在Python中,只需使用像example_list[1:4]
这样的括号进行切片。在pandas身上也是一样的:
movie_subset = movies_df.loc['Prometheus':'Sing']
movie_subset = movies_df.iloc[1:4]
print (movie_subset)
运行结果:
条件筛选
我们已经讨论了如何选择列和行,但是如果我们想要进行条件选择呢?
例如,如果我们想要过滤我们的movies DataFrame来只显示Ridley Scott导演的电影或评分大于或等于8.0的电影,该怎么办?
为此,我们从DataFrame获取一个列,并对其应用一个布尔条件。下面是一个布尔条件的例子:
movies_df[movies_df['director'] == "Ridley Scott"]
运行结果:
与isnull()
类似,它返回Series真值和假值:对于雷德利·斯科特导演的电影为真,对于非雷德利·斯科特导演的电影为假。
我们想过滤掉所有不是雷德利·斯科特导演的电影,换句话说,我们不想要假电影。要返回条件为True的行,我们必须将这个操作传递到DataFrame:
movies_df[movies_df['director'] == "Ridley Scott"]
运行结果:
让我们看看条件选择使用数值过滤Dataframe打分:
movies_df[movies_df['rating'] >= 8.6].head(3)
运行结果:
我们可以使用逻辑运算符来生成更丰富的条件语句,比如“or”和&“and”。
让我们只显示克里斯托弗·诺兰(Christopher Nolan)或雷德利·斯科特(Ridley Scott)的电影:
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/