亚历山大Hagmann

任何数据科学项目中的第一个也是最重要的步骤正在创建和将数据加载到Pandas DataFrames中。Pandas是Python数据科学生态系统的重要组成部分。数据科学家合并,使用Pandas DataFrame进行操作,操作和分析表格数据。最后,他们准备机器学习数据。

现实世界的数据通常是不洁,无组织和非结构化的。任何项目开头的主要挑战是:

  1. 定义项目所需的数据。
  2. 查找并识别正确的数据源。
  3. 将数据从数据源加载到Pandas DataFrames中。
  4. 清洁,过程和操纵数据。
完整的Pandas Bootcamp 2021:数据科学与Python

最后更新2021年5月

  • 325讲座
  • 各级
4.7 (2,016)

PANDAS充分解释|150+练习|必须有机器学习和金融技能|+ Scikit-reath和Seaborn |由Alexander Hagmann.

探索课程

在本文中,我将解释如何将数据从最常见的数据源加载到Pandas DataFrames中。您将学习如何将步骤3和4组合:在将其加载到DataFrame的行和列格式时尽可能多地清洁和塑造数据。这节省了大量的时间和额外的工作流程。简而言之,更顺畅的数据导入,整个项目越高。

数据源 - 概述

我们可以将数据源分为四组:Python(及其基本数据结构),本地文件,Internet和数据库。有些人认为还有另一个来源:数据存储在其他熊猫DataFrames和Pandas系列中。

了解Pandas Dataframes.

让我们看一下下面的小数据帧DF.包含有关五个足球运动员的信息:

dataframe是二维标记数据结构。在我们的例子中,DF.有五行和五列。每一行是一名足球运动员(例如,“莱昂内尔·梅西)。每列包含有关玩家的信息(例如,高度为米)。列“名称”在左侧不是列。这是Dataframe的索引。索引标记行。在我们的示例中,行由播放器名称标记。如果未指定,则DataFrame具有升温整数(0,1,2,...,)的范围Index。在顶部,我们可以找到列标题(例如,“国家”)。拥有唯一的行标签和唯一列标题是最好的做法。这允许您清楚地识别行和列。

在创建DataFrame时按照三条规则:

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

控件检查数据类型信息()方法。

df.info()

dtype.目的指示字符串/文本数据或混合数据类型。在我们的示例中,“Country”列中有同构的字符串/文本数据和“club_2019”。所以,DF.满足所有三个条件。

如何在Python中创建具有基本数据结构的Dataframe

作为第一步,导入熊猫库进口熊猫作为PD每当你与熊猫合作。

进口熊猫作为PD

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

  1. 列出列表中的列('字典方案')

让我们假设您已经存储在列表中的列(不包括标题):国家,俱乐部,WC,高度,目标。此外,您列出了列表中的行标签:名称。

名称= [“莱昂内尔·梅西”,“克里斯蒂亚诺·罗纳尔多”,“Neymar junior”,“kylian mbappe”,“manuel neuer”,“manuel neuer”国家= [“阿根廷”,“葡萄牙”,“巴西”,“法国”,“德国”,“德国”] Club = [“FC Barcelona”,“juventus fc”,“巴黎SG”,“巴黎SG”,“FC拜仁”,“FC拜仁”] WC = [FALSE,FALSE,FALSE,TRUE,TRUE]高度= [1.70,1.87,1.75,1.78,1.93] GOALAS = [51,28,23,39,0]

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

数据= {“国家”:国家,“Club_2019”:Club,“WC”:WC,“Height_m”:Height,“GoALS_2019”:目标}

我们已准备好创建DataFrame对象DF.pd.dataframe()。通过字典数据到参数数据并定义那个名称应该是DataFrame的索引指数=名称

df = pd.dataframe(data = data,index = names)

最后,您可以为索引分配一个名称df.index.name =.。在我们的示例中,我们分配“名称”。

df.index.name = "名称"

让我们最后看看DF.

  1. 在列表中具有行('嵌套列表方案')

让我们假设您已经存储在列表中的所选行(包括行标签):Messi,Ronaldo,Neymar,Mbappe,Neuer。

Messi = [“莱昂内尔·梅西”,“阿根廷”,“FC Barcelona”,False,1.7,51]罗纳尔多= [“Cristiano Ronaldo”,“葡萄牙”,“尤文图斯FC”,FALSE,1.87,28] Neymar = [“Neymar Junior“,”巴西“,”巴黎SG“,False,1.75,23] Mbappe = [”Kylian Mbappe“,”法国“,”巴黎SG“,True,1.78,39] Neuer = [”Manuel Neuer“,“德国”,“FC拜仁”,真实,1.93,0]

此外,您在列表中有所需的列标题。

标题= [“名称”,“国家”,“Club_2019”,“WC”,“Height_m”,“GoALS_2019”]

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

数据= [Messi,Ronaldo,Neymar,Mbappe,Neuer]

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

df = pd.dataframe(data = data,columns = headers)

让我们检查一下DF.

在这个场景中,我们最终得到6列(包括名称)和一个RangeIndex。您可以将索引设置为列名称用方法set_index()。更改DataFrame对象DF.使用新索引,设置inplace =真的。否则,索引的更改不会保存在内存中。

Players.Set_Index(“名称”,InPlace = True)

我们终于到了:

左上有一个场景:如果我们从字典开始怎么办数据有错误的数据组织:每个键值对是一行/观察?

梅西:["阿根廷","巴塞罗那",False, 1.87, 51], c罗:["葡萄牙","尤文图斯",False, 1.87, 28],小内马尔:["巴西","巴黎SG", False, 1.78, 23],姆巴佩:["法国","巴黎SG", True, 1.78, 39],诺伊尔:["德国","拜仁",True, 1.93, 0]}

如果你通过字典数据pd.dataframe(),您将得到一个DataFrame,其中观察数据在列中,特性在行中。这不是一个你可以工作的数据帧!您可以通过一些Pandas命令来解决这个问题。但是有一个更好的方法可以让你完全避免这个问题。最好重新整理一下词典数据并创建嵌套列表。

indested_list = [] for key,data.items():value.insert(0,key)inested_list.append(值)

我们回到了方案2:

df = pd.dataframe(data = nested_list,columns = headers)df.set_index(“name”,inplace = true)

如何从本地文件加载数据集到熊猫数据帧

您可以将计算机上的本地文件加载到Pandas上的本地文件pd.read_xxx()家庭:

pd.read_csv()pd.read_excel()非常相似并分享大多数选项和参数。

当从CSV和Excel文件加载数据时,你应该知道的5件事

  1. 地点

从本地文件加载数据时,您需要知道的第一个也是最重要的事情:文件的位置。将完整的文件路径/名称传递为参数的字符串filepath_or_buffer。以下是创建DataFrame对象的模板DF.来自CSV和Excel文件:

df = pd.read_csv(filepath_or_buffer = full_file_name)#csv文件df = pd.read_excel(filepath_or_buffer = full_file_name)#excel文件

请注意,您可以省略'filepath_or_buffer ='

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

姓名,国家,俱乐部_2019,WC,Height_m,Goals_2019 Lionel Messi,阿根廷,Fc Barcelona,False,1.7,51 Cristiano罗纳尔多,葡萄牙,尤文图斯FC,FALSE,1.87,28 Neymar初级,巴西,巴黎SG,False,1.75,23Kylian Mbappe,法国,巴黎SG,True,1.78,39 Manuel Neuer,德国,FC拜仁,True,1.93,0

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

Windows上的完整文件名可以是C:\用户\ Alex \ Desktop \ Players.csv

MacOS和Linux上的完整文件名可能是:/users/alex/desktop/players.csv.

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

df = pd.read_csv(“c:\ users \ alex \ desktop \ players.csv”)

如何解决此问题有两种方法:

df = pd.read_csv(“c:/users/alex/desktop/players.csv”)
df = pd.read_csv(r“c:\ users \ alex \ desktop \ players.csv”)

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

df = pd.read_csv(“/用户/ alex / desktop / players.csv”)

如果文件Players.csv.在您当前的工作目录(CWD)中,通过文件名就足够了Players.csv.没有完整的路径。请注意,CWD可能不同,取决于您的系统和Python安装。

df = pd.read_csv(“players.csv”)

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

df = pd.read_excel(r“c:\ users \ alex \ desktop \ players.xlsx”)#windows
  1. 设置索引

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

df = pd.read_csv(...,index_col =“name”)

除了传递列标头,还可以传递列索引位置。在我们的例子中,名称处于列索引位置0。

df = pd.read_csv(...,index_col = 0)

如果你没有指定索引,Pandas会创建一个RangeIndex。

(从Excel文件加载玩家数据集players.xlsx.以同样的方式工作。)

  1. 选择列

无需将所有列加载到熊猫中。您可以通过将列表传递到参数来选择特定列USECOLS.。例如,您可以加载列名称国家, 和Goals_2019USECOLS = [“名称”,“国家”,“GOALAS_2019”]

df = pd.read_csv(...,useCols = [“名称”,“国家”,“GOALAS_2019”))

这会创建DataFrameDF.带有RangeIndex。当然,你可以结合起来USECOLS.index_col

df = pd.read_csv(...,usecols = [“name”,“country”,“goals_2019”],index_col =“name”)

从Excel文件中加载玩家数据集players.xlsx.相应地工作。但还有一个选择。您还可以在字符串中指定Excel列(A,B,C,...)中的Excel列(A,B,C,...):USECOLS =“A,B,D”。

df = pd.read_excel(...,useecols =“a,b,d”)

这将Excel列A,B和D加载到熊猫。

  1. 列标题

有时,外部文件中没有列标题。此数据集从第一个观察开始(Lionel Messi)。让我们考虑CSV文件Players.csv.没有列标题:

莱昂内尔·梅西,阿根廷,FC巴塞罗那,False,1.7,51克里斯蒂亚诺罗纳尔多,葡萄牙,尤文图斯FC,FALSE,1.87,28 Neymar初级,巴西,巴黎SG,False,1.75,23 Kylian Mbappe,France,Paris SG,True,1.78,39 Manuel Neuer,德国,FC拜仁,True,1.93,0

标题=无您指定文件中没有列标题。标题=无通常与参数结合使用名字。您可以通过适当的列标题列表名称

df = pd.read_csv(...,header = none,名称= [名称“,”国家“,”club_2019“,”wc“,”height_m“,”goals_2019“))

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

df = pd.read_csv(...,名称= [名称“,”国家“,”club_2019“,”wc“,”height_m“,”goals_2019“))
  1. 日期和时间

一些数据集有包含日期和时间信息的列(' datetime ')。以下CSV文件Stocks.csv.包含微软(MSFT)和Apple(AAPL)的每日股价:

日期,AAPL,MSFT 2020-05-04,293.16,178.84 2020-05-05,297.56,180.76 2020-05-06,76 2020-05-06,300.63,182.54 2020-05-07,303.74,183.60 2020-05-08,31013,184.68

如果未指定,Pandas将DateTime信息作为String / Object数据类型加载。大多数时候,期望将这些列的数据类型转换为DateTime64.经过将列表中的列标头传递给参数parse_dates。这通常与之结合使用index_col创建DateTimeIndex。使用Pandas管理和分析金融数据很容易进行DateTimeIndex

df = pd.read_csv(...,parse_dates = [“日期”],index_col =“日期”)df.info()

使用pd.read_csv()和pd.read_excel()有更多的选项可自定义数据导入。了解更多关于如何从混乱的CSV和Excel文件中导入数据

如何从JSON文件加载数据

以下是创建DataFrame对象的模板DF.来自json文件Players.json.pd.read_json()

df = pd.read_json(full_file_name)

从JSON文件加载数据时,很少有选择。JSON文件用于存储和传输复杂和嵌套数据集。有时,您必须使用该参数东方或者用扁平化数据pd.json_normalize()学到更多)。

如何将数据集加载到Pandas DataFrames中

Twitter,Yahoo Finance或电影数据库等平台允许用户通过其Web API检索数据。API文档包含有关使用Web API的详细说明。用户需要将HTTP请求(如API文档中定义)发送到Web服务器,并以CSV或JSON文件格式接收数据。这请求库是在Python中制作HTTP请求的标准。最后,可以将数据加载到熊猫(见2个例子)。

在简单的情况下,您可以直接将CSV文件从网站加载到熊猫pd.read_csv()通过将URL作为字符串传递给filepath_or_buffer =

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

pd.read_html()您可以通过将URL传递到网站的所有表IO =

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

注意pd.read_html()返回dataframes列表。

如何从SQL数据库加载数据集到熊猫数据帧

您可以从SQL数据库中读取表sqlite.mysql.PostgreSQL.,更多pd.read_sql()

df = pd.read_sql(SQL =“SQL查询”,CON = Connection)

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

根据您选择的数据库系统,您也必须安装和导入Python库sqlite3.或者Sqlalchemy.要创建连接(查看具有SQLite的示例)。

如何创建新的熊猫DataFrames从其他DataFrames和熊猫系列

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

  1. 过滤DataFrames.

让我们过滤播放器DataFrameDF.并创建一个新的dataframe只有那些高于1.75米的球员:

高= df (df。拷贝()高

在使用时避免任何问题DF.,链式复制()方法。这在内存中创建并保存了独立于原始DataFrame的内存中的新数据帧对象。

  1. 将Pandas系列转换为DataFrame

在选择DataFrame的一列(例如,“GoALS_2019”)时,Pandas创建了一个熊猫系列。让我们创建“目标”系列:

目标= df.Goals_2019.copy()目标

PANDAS系列是一维标记阵列。DataFrame对象和系列对象的行为类似地并分享许多方法。但它们并不相同。有时,使用该方法将串联转换为DataFrame是有益的to_frame()

GOALAS = GOALS.TO_FRAME()目标

结论

您可以使用多种方式创建Pandas DataFrame。您必须回答的第一个也是最重要的问题是:来自哪里的数据来自哪里?知道数据源后,您可以选择将数据加载到熊猫的适当工具。下表提供了概述:

页面上次更新:10月2020年

熊猫顶级课程

完整的Pandas Bootcamp 2021:数据科学与Python
亚历山大Hagmann
4.7 (2,012)
用熊猫完成数据分析:实践熊猫Python
Ankit Mistry,数据科学与机器学习学院
4.5 (601)
终极熊猫Bootcamp:高级Python数据分析
安迪贝克
4.7 (319)
畅销书
用Python和Pandas管理金融数据:独特的大师类
亚历山大Hagmann
4.6 (411)
畅销书
Python中的数据操作:Pandas Crash课程
萨缪尔·辛顿,我是利朗西团队的
4.7 (834)
畅销书
熊猫和Python的数据分析
Boris Paskhaver.
4.7 (13,302)
畅销书
熊猫数据科学图书馆(All in One)
Shambhavi Gupta
4.6 (15)
新的

更多熊猫课程

熊猫学生也会学习

赋予你的团队。引领行业。

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

请求一个演示

Alexander Hagmann的课程

完整的Pandas Bootcamp 2021:数据科学与Python
亚历山大Hagmann
4.7 (2,012)
用Python和Pandas管理金融数据:独特的大师类
亚历山大Hagmann
4.6 (411)
畅销书
使用Python从免费Web源导入金融数据
亚历山大Hagmann
4.6 (189)
完成2合1 Python用于商业和金融训练营
亚历山大Hagmann
4.8 (478)
评价最高
Python数据科学与熊猫:硕士12个高级项目
亚历山大Hagmann
4.4 (294)
畅销书
Python for Excel:使用xlwings进行数据科学和金融
亚历山大Hagmann
4.7 (240)
畅销书
算法交易A-Z配有Python,机器学习和AWS
亚历山大Hagmann
4.6 (500)
畅销书
用Python进行算法交易的技术分析
亚历山大Hagmann
4.6 (85)
畅销书

Alexander Hagmann的课程