资讯专栏INFORMATION COLUMN

[译]从列表或字典创建Pandas的DataFrame对象

zhaochunqi / 496人阅读

摘要:在这些情况下,了解如何从标准列表或字典创建会很有帮助。大多数人会注意到列的顺序看起来不对。这个问题出现的原因是标准的字典不保留其键的顺序。列表从创建的另一个选择是将数据包含在列表结构中。

介绍

每当我使用pandas进行分析时,我的第一个目标是使用众多可用选项中的一个将数据导入Pandas的DataFrame 。
对于绝大多数情况下,我使用的 read_excel , read_csv 或 read_sql 。

但是,有些情况下我只需要几行数据或包含这些数据里的一些计算。
在这些情况下,了解如何从标准python列表或字典创建DataFrames会很有帮助。
基本过程并不困难,但因为有几种不同的选择,所以有助于理解每种方法的工作原理。
我永远记不住我是否应该使用 from_dict , from_records , from_items 或默认的 DataFrame 构造函数。
通常情况下,通过一些反复试验和错误,我能搞定它。但由于它仍然让我感到困惑,我想我会通过以下几个例子来澄清这些不同的方法。
在本文的最后,我简要介绍了在生成Excel报表时如何使用它。

从Python的数据结构中生成DataFrame

您可以使用多种方法来获取标准python数据结构并创建Pandas的DataFrame。
出于这些示例的目的,我将为3个虚构公司创建一个包含3个月销售信息的DataFrame。

字典

在展示下面的示例之前,我假设已执行以下导入:

import pandas as pd
from collections import OrderedDict
from datetime import date

从python创建DataFrame的“默认”方式是使用字典列表。在这种情况下,每个字典键用于列标题。将自动创建默认索引:

sales = [{"account": "Jones LLC", "Jan": 150, "Feb": 200, "Mar": 140},
         {"account": "Alpha Co",  "Jan": 200, "Feb": 210, "Mar": 215},
         {"account": "Blue Inc",  "Jan": 50,  "Feb": 90,  "Mar": 95 }]
df = pd.DataFrame(sales)


如您所见,这种方法非常“面向行”。如果您想以“面向列”的方式创建DataFrame,您可以使用 from_dict

sales = {"account": ["Jones LLC", "Alpha Co", "Blue Inc"],
         "Jan": [150, 200, 50],sheng cheng
         "Feb": [200, 210, 90],
         "Mar": [140, 215, 95]}
df = pd.DataFrame.from_dict(sales)

使用此方法,您可以获得与上面相同的结果。需要考虑的关键点是哪种方法更容易理解您独特的使用场景。
有时,以面向行的方式获取数据更容易,而其他时候以列为导向的则更容易。
了解这些选项将有助于使您的代码更简单,更易于理解,以满足您的特定需求。

大多数人会注意到列的顺序看起来不对。这个问题出现的原因是标准的python字典不保留其键的顺序。
如果要控制列顺序,则有两种方式。

第一种,您可以手动重新排序列:

df = df[["account", "Jan", "Feb", "Mar"]]

或者你可以使用python中的OrderedDict 创建你的有序字典 。

sales = OrderedDict([ ("account", ["Jones LLC", "Alpha Co", "Blue Inc"]),
          ("Jan", [150, 200, 50]),
          ("Feb",  [200, 210, 90]),
          ("Mar", [140, 215, 95]) ] )
df = pd.DataFrame.from_dict(sales)

这两种方法都会按照您可能期望的顺序为您提供结果。

由于我在下面概述的原因,我倾向于专门重新排序我的列,尽管使用OrderedDict一直是一个很好理解的选项。

列表

从python创建DataFrame的另一个选择是将数据包含在列表结构中。
第一种方法是使用pandas进行面向行的方法 from_records 。此方法类似于字典方法,但您需要显式调出列标签。

sales = [("Jones LLC", 150, 200, 50),
         ("Alpha Co", 200, 210, 90),
         ("Blue Inc", 140, 215, 95)]
labels = ["account", "Jan", "Feb", "Mar"]
df = pd.DataFrame.from_records(sales, columns=labels)

第二种方法是 from_items 面向列的,实际上看起来类似于 OrderedDict 上面的例子。

sales = [("account", ["Jones LLC", "Alpha Co", "Blue Inc"]),
         ("Jan", [150, 200, 50]),
         ("Feb", [200, 210, 90]),
         ("Mar", [140, 215, 95]),
         ]
df = pd.DataFrame.from_items(sales)

这两个示例都将生成以下DataFrame:

各种选项的直观总结

为了保持各种选项在我的脑海中清晰,我将这个简单的图形放在一起,以显示字典与列表选项以及行与列导向的方法。
这是一个2X2的网格,所以我希望所有来询问的人都留下深刻的印象!

为简单起见,我没有展示 OrderedDict 方法,因为这种 from_items 方法可能更像是一个现实世界的解决方案。
如果这有点难以阅读,您也可以获得PDF版本。

简单的例子

对于一个简单的概念,这似乎有很多解释。
但是,我经常使用这些方法来构建小型DataFrame,并将其与更复杂的分析结合起来。

举一个例子,假设我们要保存我们的DataFrame并包含一个页脚,以便我们知道它何时被创建以及它是由谁创建的。
如果我们填充DataFrame并将其写入Excel比我们尝试将单个单元格写入Excel更容易。

拿我们现有的DataFrame:

sales = [("account", ["Jones LLC", "Alpha Co", "Blue Inc"]),
         ("Jan", [150, 200, 50]),
         ("Feb", [200, 210, 90]),
         ("Mar", [140, 215, 95]),
         ]
df = pd.DataFrame.from_items(sales)

现在构建一个页脚(以列为导向):

from datetime import date

create_date = "{:%m-%d-%Y}".format(date.today())
created_by = "CM"
footer = [("Created by", [created_by]), ("Created on", [create_date]), ("Version", [1.1])]
df_footer = pd.DataFrame.from_items(footer)


合并进入一个Excel中的一个sheet:

writer = pd.ExcelWriter("simple-report.xlsx", engine="xlsxwriter")
df.to_excel(writer, index=False)
df_footer.to_excel(writer, startrow=6, index=False)
writer.save()


这里的秘诀是使用 startrow 在销售数据框架下面写入页脚DataFrame。还有一个相应的startcol,所以你可以控制成为你想要的列布局。
这使得基本 to_excel 功能具有很大的灵活性。

总结

大多数Pandas用户很快就熟悉了电子表格,CSV和SQL数据的摄取。
但是,有时您会在基本列表或字典中包含数据并希望填充DataFrame。
Pandas提供了几种选择,但可能并不总是立即明确何时使用哪种选择。

没有一种方法是“最好的”,它实际上取决于您的需求。
我倾向于喜欢基于列表的方法,因为我通常关心排序,列表确保我保留顺序。
最重要的是要知道这些选项是可用的,这样您就可以聪明地使用最简单的选项来满足您的特定情况。

从表面上看,这些代码样例看似简单,但我发现使用这些方法生成快速的信息片非常常见,他们可以增加或澄清更复杂的分析。
DataFrame中数据的好处在于它很容易转换为其他格式,如Excel,CSV, HTML,LaTeX等。
这种灵活性对于临时报告生成非常方便。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42528.html

相关文章

  • 【数据科学系统学习】Python # 数据分析基本操作[二] pandas

    摘要:中面向行和面向列的操作基本是平衡的。用层次化索引,将其表示为更高维度的数据。使用浮点值表示浮点和非浮点数组中的缺失数据。索引的的格式化输出形式选取数据子集在内层中进行选取层次化索引在数据重塑和基于分组的操作中很重要。 我们在上一篇介绍了 NumPy,本篇介绍 pandas。 pandas入门 Pandas 是基于Numpy构建的,让以NumPy为中心的应用变的更加简单。 pandas...

    jayzou 评论0 收藏0
  • 【数据科学系统学习】Python # 数据分析基本操作[四] 数据规整化和数据聚合与分组运算

    摘要:数据规整化清理转换合并重塑数据聚合与分组运算数据规整化清理转换合并重塑合并数据集可根据一个或多个键将不同中的行链接起来。函数根据样本分位数对数据进行面元划分。字典或,给出待分组轴上的值与分组名之间的对应关系。 本篇内容为整理《利用Python进行数据分析》,博主使用代码为 Python3,部分内容和书本有出入。 在前几篇中我们介绍了 NumPy、pandas、matplotlib 三个...

    The question 评论0 收藏0
  • 一文带你斩杀Python之Numpy☀️Pandas全部操作【全网最详细】❗❗❗

    目录Numpy简介Numpy操作集合1、不同维度数据的表示1.1 一维数据的表示1.2 二维数据的表示1.3 三维数据的表示2、 为什么要使用Numpy2.1、Numpy的ndarray具有广播功能2.2 Numpy数组的性能比Python原生数据类型高3 ndarray的属性和基本操作3.1 ndarray的基本属性3.2 ndarray元素类型3.3 创建ndarray的方式3.4 ndarr...

    asoren 评论0 收藏0
  • Pandas库基础分析——数据生成和访问

    摘要:本文着重介绍这两种数据结构的生成和访问的基本方法。是一种类似于一维数组的对象,由一组数据一维数组对象和一组与之对应相关的数据标签索引组成。注当数据未指定索引时,会自动创建整数型索引注通过字典创建,可视为一个定长的有序字典。 前言 Pandas是Python环境下最有名的数据统计包,是基于 Numpy 构建的含有更高级数据结构和工具的数据分析包。Pandas围绕着 Series 和 Da...

    Jonathan Shieber 评论0 收藏0
  • python_pandas学习

    摘要:的名称来自于面板数据和数据分析。以下的内容主要以为主。终端输入导入相关模块是一种类似于一维数组的对象,它由一组数据各种数据类型以及一组与之相关的数据标签即索引组成。如果仅传入一个序列,则会重新索引行函数的参数参数说明用作索引的新序列。 原文链接 numPy pandas的数据结构介绍 简介 Pandas [1] 是python的一个数据分析包,最初由AQR Capital Mana...

    codercao 评论0 收藏0

发表评论

0条评论

zhaochunqi

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<