今日是程序员节,祝广大程序员们工作开心吧!虽然小编觉得跟日常没什么区别,也没看到有程序员小哥哥们放假或者不加班,那么今日就分享一个实用的日常小技巧希望对大家的工作有帮助让工作更轻松。
简介
最常用的 pandas 函数之一是 read_excel。本文展示了如何读入一个 Excel 工作簿中的所有选项卡,并使用一条命令将它们合并到一个 pandas 数据帧中。对于那些太长不想读的人来说,以下是该命令:
df = pd.concat(pd.read_excel('2018_Sales_Total.xlsx', sheet_name=None), ignore_index=True)
请继续阅读,了解如何使用此功能以及它是如何工作的。
Excel 工作表
在本例中,我们假设 Excel 工作簿的结构如下:
我将描述的过程适用于以下情况:
- 数据不能进行跨选项卡复制(工作表1是一个完整的月,后面的工作表总共只有一个月的数据)
- 所有列的名称都是相同的
- 您希望读入所有选项卡并合并它们
理解 read_excel
read_excel 函数是一个全能的 pandas 函数。对于这种特定情况,我们可以使用 sheet_name 参数来简化我们 Excel 文件中所有工作表的读入。
大多数情况下,您会从一个 Excel 文件中读入一个特定的工作表:
import pandas as pd
workbook_url = 'https://github.com/chris1610/pbpython/raw/master/data/2018_Sales_Total_Tabs.xlsx'
single_df = pd.read_excel(workbook_url, sheet_name='Sheet1')
如果仔细查看文档,您可能会注意到,如果您使用 sheet_name=None,您就可以一次读取工作簿中的所有工作表。让我们试一下:
all_dfs = pd.read_excel(workbook_url, sheet_name=None)
Pandas 将读入所有的工作表并返回一个 collections.OrderedDict 对象。为了提高本文的可读性,我定义了完整的 url 并将其传递给 read_excel。在实践中,您可能会决定使用这个命令。
让我们检查生成的 all_dfs:
all_dfs
如果您想将一个单个的工作表作为一个数据帧来访问:
all_dfs
如果我们想将所有单独的数据帧组合到一个数据帧中,我们就使用 pd.concat:
df = pd 。concat (all_dfs , ignore_index = True )
在这种情况下,我们将使用 ignore_index,因为自动生成的 Sheet1、Sheet2等索引是没有意义的。
如果您的数据符合上面列出的结构,这一行程序将返回一个 pandas 数据帧,它合并了每个 Excel 工作表中的数据:
df = pd.concat(pd.read_excel(workbook_url, sheet_name=None), ignore_index=True)
总结 这个技巧在合适的情况下是有用的。它还说明了“仅”读入一个 Excel 文件的 pandas 命令的功能有多强大。如果您想亲自尝试一下,您可以在 github上找到完整的 notebook。
英文原文:https://pbpython.com/pandas-excel-tabs.html