亚历山大·哈格曼

任何数据科学项目的第一步也是最重要的一步都是创建数据并将其加载到熊猫数据框架中。熊猫是Python数据科学生态系统的重要组成部分。数据科学家将表格数据与熊猫数据框架合并、操作和分析。最后,他们为机器学习准备数据。

现实世界的数据通常是不干净、无组织和无结构的。任何项目开始时的主要挑战是:

  1. 定义项目所需的数据。
  2. 查找并确定正确的数据源。
  3. 将数据源中的数据加载到数据帧中。
  4. 清理、处理和操作数据。
完整的熊猫训练营2021:使用Python的数据科学

最后更新日期:2021年9月

最高评级
  • 325次讲座
  • 各级
4.7 (2,326)

熊猫全面解释| 150+练习|必须具备机器学习和金融技能|+Scikit学习和Seaborn|亚历山大·哈格曼

探索课程

在本文中,我将解释如何将最常见的数据源中的数据加载到Pandas数据帧中。您将学习如何结合步骤3和步骤4:在将数据加载到数据帧的行和列格式时,尽可能多地清理和成形数据。这将节省大量时间和额外的工作流。简单地说,过程越平滑数据导入,整个项目的效率就越高。

数据源–概述

我们可以将数据源分为四类:Python(及其基本数据结构)、本地文件、互联网和数据库。有些人认为还有另一类数据源:存储在其他熊猫数据框架和熊猫系列中的数据。

理解数据帧

让我们看一下下面的小数据帧df其中包含五名足球运动员的信息:

数据帧是一种二维标记数据结构。在我们的示例中,df有五行五列。每一排都是一名足球运动员(例如,“莱昂内尔·梅西)。每栏包含球员的信息(例如,身高,以米为单位)。栏““姓名”左边不是一列。它是数据帧的索引。索引标记行。在我们的示例中,行由玩家的名字标记。如果未指定,则数据帧具有带递增整数(0、1、2、…)的RangeIndex。在顶部,我们可以找到列标题(例如,“Country”)。最好的做法是具有唯一的行标签和唯一的列标题。这允许您清楚地标识行和列。

创建数据帧时请遵循三条规则:

  1. 按行组织观察(例如足球运动员)
  2. 在列中组织特征/变量(例如,玩家的高度)
  3. 同质数据:列中的所有元素必须具有相同的数据类型(dtype)

您可以使用信息()方法

df.info()

数据类型对象指示字符串/文本数据或混合数据类型。在我们的示例中,在“Country”列中有相同的字符串/文本数据和“俱乐部2019”。因此df满足所有三个条件。

如何使用Python中的基本数据结构创建数据帧

作为第一步,使用导入Pandas库作为pd进口熊猫每当你和熊猫一起工作的时候。

作为pd进口熊猫

如果您已经拥有基本Python结构中的数据,则可以使用pd.DataFrame()。接下来的步骤取决于数据的组织方式。主要有两种情况:1.列表/数组中已有列。2.列表/数组中已有行。

  1. 在列表中包含列(“字典场景”)

假设列表中已经存储了列(不包括标题):国家、俱乐部、wc、身高、目标。此外,列表中还有行标签:名称。

姓名=[“莱昂内尔·梅西”、“克里斯蒂亚诺·罗纳尔多”、“内马尔·朱尼尔”、“基莲·姆巴佩”、“曼努埃尔·诺伊尔”]国家=[“阿根廷”、“葡萄牙”、“巴西”、“法国”、“德国”]俱乐部=[“巴塞罗那俱乐部”、“尤文图斯俱乐部”、“巴黎SG”、“巴黎SG”、“拜仁俱乐部”]wc=[假、假、假、真、真]身高=[1.70、1.87、1.75、1.78、1.93]进球=[51、28、23、39、0]

在这种情况下,最好创建一个包含所有列的字典。字典中的每个键值对都包含一个适当的列标题(例如,2019俱乐部)作为键和相应的列表作为值(俱乐部).让我们创建字典数据:

数据={“国家”:国家,“俱乐部2019”:俱乐部,“WC”:WC,“身高”:身高,“目标2019”:目标}

我们已经准备好创建DataFrame对象df具有pd.DataFrame(). 传字典数据到参数数据然后定义它名字应该是具有索引=名字.

df=pd.DataFrame(数据=数据,索引=名称)

最后,您可以使用df.index.name=.在我们的示例中,我们指定“Name”。

df.index.name=“name”

让我们最后看一看df:

  1. 在列表中包含行(“嵌套列表场景”)

假设列表中已经存储了选定的行(包括行标签):梅西、罗纳尔多、内马尔、姆巴佩、纽尔。

梅西=[“莱昂内尔·梅西”,“阿根廷”,“巴塞罗那俱乐部”,假,1.7,51]罗纳尔多=[“克里斯蒂亚诺·罗纳尔多”,“葡萄牙”,“尤文图斯俱乐部”,假,1.87,28]内马尔=[“小内马尔”,“巴西”,“巴黎SG”,假,1.75,23]姆巴佩=[“基里安·姆巴佩”,“法国”,“巴黎SG”,真,1.78,39]纽尔=[“曼努埃尔·诺伊尔”,“德国”,“拜仁俱乐部”,真,1.93,0]

此外,在“标题”列表中还有所需的列标题

页眉=[“姓名”、“国家”、“2019年俱乐部”、“WC”、“身高”、“2019年目标”]

在这种情况下,最好创建一个列表列表。让我们将所有行放入嵌套列表“数据”:

数据=[梅西、罗纳尔多、内马尔、姆巴佩、纽尔]

我们已经准备好创建DataFrame对象df具有pd.DataFrame(). 传递嵌套的“列表”数据到参数数据并定义“headers”应该是带有列=标题.

df=pd.DataFrame(数据=数据,列=标题)

让我们检查一下df:

在这个场景中,我们将得到六列(包括名称)和一个RangeIndex名称用这个方法集合索引()。以更改数据帧对象df使用新索引,设置原地=真. 否则,索引的更改不会保存在内存中。

players.set_索引(“Name”,inplace=True)

我们终于到了:

还有一种情况:如果我们从一本字典开始呢数据有错误的数据组织:每个键值对都是一行/观察值?

数据={“莱昂内尔·梅西”:[“阿根廷”,“巴塞罗那俱乐部”,假,1.7,51],“克里斯蒂亚诺·罗纳尔多”:[“葡萄牙”,“尤文图斯俱乐部”,假,1.87,28],“内马尔青年”:[“巴西”,“巴黎SG”,假,1.75,23],“基连·姆巴佩”:[“法国”,“巴黎SG”,真,1.78,39],“曼努埃尔·诺伊尔”:[“德国”,“拜仁俱乐部”,真,1.93,0]}

如果你把字典递给我数据pd.DataFrame(),您将得到一个数据框,其中观察值在列中,功能在行中。这不是一个您可以使用的数据框!您可以使用一些Pandas命令来解决该问题。但是有一种更好的方法可以让您完全避免该问题。最好重新组织字典数据并创建一个嵌套列表。

嵌套的_列表=[]对于键,数据中的值。项():value.insert(0,key)嵌套的_列表。append(value)

我们回到场景2:

df=pd.DataFrame(data=nested\u list,columns=headers)df.set\u index(“Name”,inplace=True)

如何将本地文件中的数据集加载到数据帧中

您可以使用将计算机上本地文件中的数据集加载到熊猫中pd.read_xxx()家庭:

pd.read_csv()pd.read_excel()它们非常相似,共享大多数选项和参数。

从CSV和Excel文件加载数据时应了解的5件事

  1. 地方

从本地文件加载数据时需要知道的第一件也是最重要的事情是:文件的位置。将完整的文件路径/名称作为字符串传递给参数文件路径\u或\u缓冲区. 以下是创建DataFrame对象的模板df从CSV和Excel文件:

df=pd.read_csv(文件路径或缓冲区=完整文件名)#csv文件df=pd.read_excel(文件路径或缓冲区=完整文件名)#excel文件

请注意,您可以省略'文件路径\u或\u缓冲区='.

让我们假设CSV文件players.csv位于我的桌面上。打开文件时,我们可以看到以下结构:

姓名、国家、2019年俱乐部、WC、身高、2019年进球、阿根廷莱昂内尔·梅西、巴塞罗那俱乐部、False、1.7、51克里斯蒂亚诺·罗纳尔多、葡萄牙、尤文图斯俱乐部、False、1.87、28内马尔少年、巴西、巴黎SG、False、1.75、23基里安·姆巴佩、法国、巴黎SG、True、1.78、39曼努埃尔·诺伊尔、德国、FC拜仁、True、1.93、0

CSV文件是使用逗号分隔值的分隔文本文件。您仍然可以看到表格数据结构。文件的每一行都是数据记录(足球运动员)。每条记录由一个或多个值组成,用逗号分隔。

Windows上的完整文件名可能是C:\Users\alex\desktop\players.csv

macOS和Linux上的完整文件名可以是:/用户/alex/desktop/players.csv

请注意,Windows使用反斜杠(\)而不是斜杠(“/”)。由于反斜杠在Python中是一个特殊字符,因此使用以下代码将删除错误:

df=pd.read\u csv(“C:\Users\alex\desktop\players.csv”)

有两种方法可以解决此问题:

df=pd.read\u csv(“C:/Users/alex/desktop/players.csv”)
df=pd.read\u csv(r“C:\Users\alex\desktop\players.csv”)

在macOS和Linux上,单一的最佳解决方案是:

df=pd.read\u csv(“/Users/alex/desktop/players.csv”)

以防文件players.csv在当前工作目录(CWD)中,传递文件名就足够了players.csv请注意,CWD可能会有所不同,并且取决于您的系统和Python安装。

df=pd.read\u csv(“players.csv”)

从Excel文件加载玩家数据集players.xlsx相应地工作。

df=pd.read_excel(r“C:\Users\alex\desktop\players.xlsx”)#Windows
  1. 设置索引

您可以选择一列作为DataFrame的索引。您选择的列应仅包含唯一值(无重复值)。在我们的示例中,设置名称列作为索引是合理的,可以使用索引_col=”名称.

df=pd.read_csv(…,index_col=“Name”)

除了传递列标题,还可以传递列索引位置,名称位于列索引位置0处。

df=pd.read\u csv(…,index\u col=0)

如果未指定索引,则Pandas将创建RangeIndex。

(从Excel文件加载玩家数据集players.xlsx工作原理相同。)

  1. 选择列

无需将所有列加载到Pandas中。您可以通过向参数传递带有列标题的列表来选择特定列乌塞科尔斯。例如,您可以加载列名称,2019年目标具有usecols=[“名称”、“国家”、“目标”]

df=pd.read_csv(…,usecols=[“名称”、“国家”、“目标”\u 2019])

这将创建数据帧df使用范围索引。当然,您可以组合乌塞科尔斯索引列:

df=pd.read_csv(…,usecols=[“名称”、“国家”、“2019年目标”],index_col=“名称”)

从Excel文件加载玩家数据集players.xlsx相应地工作。但还有一个选项。您也可以在字符串中指定Excel列(a、B、C等),而不是传递带有列标题的列表:usecols=“A、B、D”。

df=pd.read_excel(…,usecols=“A,B,D”)

这会将Excel列A、B和D加载到Pandas中。

  1. 列头部

有时,外部文件中没有列标头。这个数据集从第一次观察开始(Lionel Messi)。players.csv没有列标题:

莱昂内尔·梅西,阿根廷,巴塞罗那俱乐部,假,1.7,51克里斯蒂亚诺·罗纳尔多,葡萄牙,尤文图斯俱乐部,假,1.87,28内马尔少年,巴西,巴黎SG,假,1.75,23基里安·姆巴佩,法国,巴黎SG,真,1.78,39曼努埃尔·诺伊尔,德国,拜仁俱乐部,真,1.93,0

具有页眉=无指定文件中没有列标题。页眉=无通常与参数结合使用名字。您可以将适当列标题的列表传递给名字:

df=pd.read\u csv(…,header=None,Name=[“Name”,“Country”,“Club\u 2019”,“WC”,“Height\u m”,“Goals\u 2019”])

如果文件包含不合适的列标题,可以使用更改这些标题名称(不要使用页眉=无在这里!)。

df=pd.read_csv(…,Name=[“Name”,“Country”,“Club\u 2019”,“WC”,“Height\u m”,“Goals\u 2019”])
  1. 日期和时间

某些数据集的列包含日期和时间信息(“datetime”)stocks.csv包含微软(MSFT)和苹果(AAPL)的每日股价:

日期,AAPL,MSFT 2020-05-04293.16178.84 2020-05-05297.56180.76 2020-05-06300.63182.54 2020-05-07303.74183.60 2020-05-08310.13184.68

如果未指定,Pandas将datetime信息作为字符串/对象数据类型加载。大多数情况下,需要将这些列的数据类型转换为日期时间64通过将列表中的列标题传递给参数解析你的日期。这通常与索引列创建日期时间索引。使用DatetimeIndex可以轻松管理和分析Pandas的财务数据.

df=pd.read_csv(…,parse_dates=[“Date”],index_col=“Date”)df.info()

有更多选项可以使用pd.read\u csv()和pd.read\u excel()自定义数据导入。了解有关如何从杂乱无章的CSV和Excel文件导入数据的详细信息.

如何从JSON文件加载数据

以下是创建DataFrame对象的模板df从JSON文件players.json具有pd.read_json():

df=pd.read\u json(完整文件名)

从JSON文件加载数据时,可用的选项很少。JSON文件用于存储和传输复杂和嵌套的数据集。有时,必须使用参数朝向或者使用pd.json_normalize()(了解更多).

如何将数据集从internet加载到数据帧中

Twitter、Yahoo Finance或Movies数据库等平台允许用户通过其web API检索数据。API文档包含有关使用web API的详细说明。用户需要向web服务器发送HTTP请求(如API文档中所定义),并以CSV或JSON文件格式接收数据。API文档请求库是Python中进行HTTP请求的标准。最后,可以将数据加载到数据库中(参见2个示例).

在简单的情况下,您可以使用将CSV文件从web直接加载到Pandas中pd.read_csv()通过将URL作为字符串传递给文件路径\u或\u缓冲区=.

df=pd.read_csv(“https://.../players.csv")

具有pd.read_html()通过将URL传递给,可以读取网站中的所有表木卫一=.

df_list=pd.read_html(io=”https://...")

注意pd.read_html()返回数据帧的列表。

如何将SQL数据库中的数据集加载到数据帧中

您可以从SQL数据库中读取表,如数据库,MySQL,PostgreSQL,还有更多pd.read_sql().

df=pd.read\u sql(sql=“sql query”,con=connection)

这个sql参数需要SQL语言的SQL查询。在从数据库中提取数据之前,必须创建到数据库的连接,并将连接对象传递给参数骗局.

根据您选择的数据库系统,还必须安装和导入Python库,如sqlite3炼金术创建连接的步骤(请参见SQLite的示例).

如何从其他数据帧和Pandas系列创建新的Pandas数据帧

许多工作流从现有数据帧和系列创建新的数据帧:过滤、聚合、操作、合并、连接、连接等。让我举两个例子:

  1. 过滤数据帧

让我们过滤播放器的数据帧df并创建一个新的数据帧高的只有身高超过1.75米的球员:

高度=df[df.Height\u m>1.75]。复制()高度

避免使用时出现任何问题高的df,链接copy()方法。这将在内存中创建并保存一个新的DataFrame对象,该对象独立于原始DataFrame。

  1. 将熊猫系列转换为数据帧

选择数据帧的一列时(例如,“Goals_2019”),Pandas会创建Pandas系列。让我们创建系列“Goals”:

目标=df.goals\u 2019.copy()目标

熊猫系列是一个一维标记数组。数据框对象和系列对象的行为相似,并共享许多方法。但它们不完全相同。有时,使用该方法将系列转换为一列数据框是有益的to_frame().

目标=目标。到框架()目标

结论

您可以通过多种方式创建Pandas数据帧。您必须回答的第一个也是最重要的问题是:数据来自何处?了解数据源后,您可以选择适当的工具将数据加载到Pandas中。下表给出了概述:

最后更新的网页:2020年10月

熊猫的顶级课程

使用Python进行数据科学
考试场地
4.5 (95)
终极熊猫训练营:高级Python数据分析
安迪贝克
4.8 (479)
畅销书
Python中的数据分析。初学者的熊猫速成班
贾尔斯·麦克马伦·克莱因
4.6 (27)
使用Pandas完成数据分析:实践Pandas Python
Ankit Mistry,数据科学与机器学习学院
4.5 (648)
使用Pandas和Python进行数据分析
鲍里斯·帕斯卡弗
4.6 (14,538)
畅销书
Python中的数据操作:熊猫速成班
塞缪尔·辛顿,光明队
4.6 (1,002)
完整的熊猫训练营2021:使用Python的数据科学
亚历山大·哈格曼
4.7 (2,326)
最高评级
使用Python和Pandas管理财务数据:独特的Masterclass
亚历山大·哈格曼
4.8 (483)
畅销书

更多熊猫课程

熊猫学生也学习

授权你的团队,引领行业。

使用Udemy for Business订阅您所在组织的在线课程和数字学习工具库。

请求演示

亚历山大·哈格曼的课程

完整的熊猫训练营2021:使用Python的数据科学
亚历山大·哈格曼
4.7 (2,326)
最高评级
使用Python和Pandas管理财务数据:独特的Masterclass
亚历山大·哈格曼
4.8 (483)
畅销书
使用Python从免费Web源导入财务数据
亚历山大·哈格曼
4.6 (230)
Python数据科学与熊猫:掌握12个高级项目
亚历山大·哈格曼
4.6 (344)
畅销书
Python for Excel:将xlwings用于数据科学和金融
亚历山大·哈格曼
4.7 (335)
畅销书
用Python、机器学习和AWS进行A-Z算法交易
亚历山大·哈格曼
4.7 (755)
用Python进行算法交易的技术分析
亚历山大·哈格曼
4.6 (186)
畅销书
交易绩效优化与风险管理
亚历山大·哈格曼
4.6 (22)
畅销书

亚历山大·哈格曼的课程