做者|Ankit Goel
编译|VK
来源|Towards Data Sciencehtml
Pandas是一个强大的开源数据分析和操做库。它能够帮助你对数据进行各类操做,并生成有关它的不一样报告。我将把这篇文章分红两篇python
基本知识-我将在这个故事中介绍。我将介绍Pandas的基本功能,这些功能将使你大体了解如何开始使用Pandas,以及它如何帮助你节省大量时间。git
高级-将经过高级的功能,使它更容易解决复杂的分析问题。它将涵盖的主题,如风格,绘图,读取多个文件等。第二部分仍在进行中,敬请期待。github
在开始以前,确保你已经安装了Pandas。若是没有,你可使用如下命令下载它。api
# 若是你使用的是Anaconda conda install -c conda-forge pandas # 使用pip安装Pandas pip install pandas # 导入pandas import pandas as pd
在这个练习中,我将使用著名的泰坦尼克号数据集。我建议你从Github下载数据和notebook,将其复制到你的环境中:https://github.com/ankitgoel1602/data-science/tree/master/data-analysis/pandasbash
有关数据的更多详细信息,请参阅Kaggle:https://www.kaggle.com/c/titanic/data?select=train.csv。机器学习
让咱们开始,我试图保持数据分析的通常流程,好比从读取数据开始,而后在数据分析过程当中经历不一样的步骤。函数
任何数据分析的起点都是获取数据集。pandas提供不一样的函数来读取不一样格式的数据。最经常使用的是学习
这容许你读取CSV文件。.net
pd.read_csv('path_to_your_csv_file.csv')
panda提供了不一样的选项来配置列名、数据类型或要读取的行数。查看Pandas read_csv API了解更多详细信息:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html。
这容许你读取Excel文件。
pd.read_excel('path_to_your_excel_file.xlsx')
与CSV同样,Pandas为read_excel提供了一组丰富的选项,容许你在excel中读取特定的工做表名称、数据类型或要读取的行数。查看Pandas read_excel API了解更多详细信息:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html
Pandas支持不少其余数据类型。若是你正在使用其余数据类型,请查看Pandas文档:https://pandas.pydata.org/pandas-docs/stable/reference/io.html
读取泰坦尼克号数据集,咱们将在这里使用read_csv命令
# 你能够从提供的Github连接获取它。 # 将Titanic数据集加载到titanic_data中 titanic_data = pd.read_csv('titanic_train.csv')
这将建立一个Pandas数据帧(如表),并将其存储到titanic_data中。
接下来,咱们将了解如何获取有关加载的数据的更多详细信息。
一旦咱们加载了数据,咱们想回顾一下。panda提供了不一样的api,咱们可使用它们来探索数据。
这相似于SQL中的TOP命令,从数据帧的开始给咱们提供前'n'条记录。
# 从数据帧中选择前5(n=5)条记录 titanic_data.head(5)
这给了咱们数据帧末尾的“n”条记录。
# 从数据帧中选择最后5条(n=5)条记录 titanitc_data.tail(5)
这将从数据中随机获取“n”个记录。注意-此命令在不一样运行时的输出可能不一样。
titanic_data.sample(5)
一旦咱们有了数据,咱们就须要知道咱们要处理的行或列的数量,而Pandas的shape API提供的正是这些。让咱们看看
# dataframe的形状,注意结尾没有括号,由于它是dataframe的属性 titanic_data.shape (891, 12)
让咱们先看看这个的输出
titanic_data.info()
正如你所看到的,“info”提供了一个很好的数据摘要,让咱们一个一个地了解它。
索引详细信息-Pandas中的每一个数据帧都有一个索引,若是你熟悉SQL,它就像是咱们建立用来访问数据的索引。这里意味着咱们有一个从0到890的范围索引,即总共891行。
“info”生成的表中的每一行都向咱们提供了有关列的详细信息、列中的值的数量以及pandas分配给它的数据类型。这对于了解缺失数据很是有用。例如咱们能够说咱们只有714行的“Age”数据。
内存使用-Pandas将数据帧加载到内存中,这将告诉咱们数据集使用了多少内存。当咱们有大的数据集时,这就很方便了。pandas有一个特定的API“memory_usage”来得到更多关于内存的信息。
这给了咱们关于数据集的统计数据。如你所见,咱们的数据帧以下所示
如你所见,它为每一列提供了许多信息,如记录计数(不计算丢失的记录,如年龄)、平均值、标准差、最小值和不一样分位数百分比。默认状况下,此命令提供有关数值数据类型(如int或float)的信息。要获取“object”列的统计信息,咱们能够运行
# 显示有关对象列的统计信息 titanic_data.describe(include=['O'])
若是你注意到,咱们在describe API中添加了'include'参数,它是一个列表,咱们能够传递多个值,好比-
include=[‘O’, ’int64']-将提供关于DataFrame中Object和int64类型列的统计信息。
include=[‘O’, ‘float64’]-将提供关于DataFrame中Object和float64类型列的统计信息。
与“include”相似,咱们也可使用“exclude”,它将在计算统计时排除列类型。若是你对更多细节感兴趣,请参阅Pandas文档:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.describe.html。
这些都是很是有用的函数,能够帮助咱们选择数据。使用这些咱们能够选择数据的任何部分。为了更好地理解它,让咱们更改数据的索引(若是你不理解,请不要担忧,我将在第2部分中讨论)。
# 将数据帧的索引从RangeIndex更改成“Ticket”值 titanic_ticket_index = titanic_data.set_index('Ticket')
这将根据标签(即列和行的名称)选择数据。例如,在上面的数据中,行标签相似于A/5 21171, PC17599, 113803,列标签相似于PassengerId, Survived, Sex。loc的通常语法是-
dataframe_name.loc[row_labels, column_labels(optional)]
行标签和列标签能够采用不一样的值。让咱们看一些例子来更好地理解它。
选择单行
输入你想要的行的标签,即,若是咱们想选择'Ticket',其中的值是'A/5 21171'。
# 注意咱们须要使用[]方括号 # 这将返回与名称匹配的行的数据。 titanic_ticket_index.loc['A/5 21171']
选择多行
不少时候,咱们须要选择多行,以便进一步分析。.loc API能够获取要选择的行标签列表,即。
或者相似的
# 咱们能够提供 start_label:end_label # 这里咱们选择标签为“PC 17599”到“373450”的行 titanic_ticket_index.loc['PC 17599':'373450']
注意-若是多行具备相同的标签,这将不起做用。
选择单列
这与咱们选择行的方式相似,可是在选择列时,咱们须要告诉Pandas咱们要选择的行。咱们能够用“:”代替行标签,这意味着咱们要选择全部行。
# 为全部行选择列。 titanic_ticket_index.loc[:,'Embarked']
选择多个列
与咱们对多行所作的相似,只须要告诉Pandas咱们正在选择哪些行。
# 为全部行选择Sex, Age, Fare, Embarked列 . titanic_ticket_index.loc[:,['Sex','Age','Fare','Embarked']]
或者相似的
# 咱们能够提供start_label:end_label # 在这里,咱们选择的列为 label 'Sex' 到 'Embarked' titanic_ticket_index.loc[:, 'Sex':'Embarked']
选择特定的行和列
iloc()
这与loc相似,但基于索引而不是标签选择行和列。与标签不一样的是,索引老是从0开始,到第7行的数目是1,列的索引老是从0到第1列。
让咱们看一个例子
# 选择特定的行和列:示例2 # 对于列和行咱们均可以用start_label:end_label # 选择第3至第6行和第1至第4列 # 结束索引应比所需的行或列大1 titanic_ticket_index.iloc[3:7, 1:5]
在这里,咱们没有像对“loc”那样查看示例。若是你想知道咱们是如何使用iloc实现一样的结果的,你能够参考Github:https://github.com/ankitgoel1602/data-science/blob/master/data-analysis/pandas/pandas_basic_functions_overview.ipynb
Value_counts为咱们提供列中惟一值的计数,这对于了解如下信息很是有用
列中有不一样的值。
最多见值。
最频繁值的比例。
# Sex列的值计数。 titanic_data['Sex'].value_counts() # 输出 male 577 female 314 Name: Sex, dtype: int64
如你所见,咱们的数据集包含了更多的男性。咱们甚至能够将其标准化以查看值之间的分布。
# 为性别列计数并标准化 titanic_data['Sex'].value_counts(normalize=True) #输出 male 0.647587 female 0.352413 Name: Sex, dtype: float64
这意味着,在咱们的数据集中,男性与女性的比例约为65:35。
一般,咱们使用难以分析的大型数据集。在这种状况下,策略是过滤不一样条件下的数据并对其进行分析。咱们只需使用Pandas查询API的一行代码就能够作到这一点。
让咱们举几个例子来更好地理解它。
选择年龄>15的行。
# 前5个年龄大于15岁的记录 titanic_data.query('Age > 15').head(5)
选择幸存的男性。
# 前5名幸存的男性 titanic_data.query('Sex=="male" and Survived==1').head(5)
咱们能够定义变量并使用它们来编写过滤器查询。当咱们须要编写脚本时,它会很方便。
# gender_to_select和min_fare,这些均可以做为参数的一部分传递给脚本 gender_to_select = "female" min_fare = 50 # 使用传递的属性查询 titanic_data.query('(Sex==@gender_to_select) and (Fare > @min_fare)')
我但愿这篇文章能帮助你开始使用Pandas并简化数据分析过程。如前所述,在本文中,我试图涵盖涉及数据分析过程不一样领域的基本函数。我将继续补充更多。
Pandas提供了许多不一样的api,能够帮助对数据执行高级操做,如绘图、风格等。我将在本系列的第2部分中介绍这些api。
原文连接:https://towardsdatascience.com/pandas-put-away-novice-data-analyst-status-part-1-7e1f0107dae0
欢迎关注磐创AI博客站:
http://panchuang.net/
sklearn机器学习中文官方文档:
http://sklearn123.com/
欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/