我的编程空间,编程开发者的网络收藏夹
学习永远不晚

用 Pandas 处理结构不佳的 Excel 文件

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

用 Pandas 处理结构不佳的 Excel 文件

问题

pandas 的 read_excel函数在读取Excel工作表方面做得很好。然而,在数据不是从A1单元格开始的连续表格的情况下,结果可能不是你所期望的那样。

比如当你尝试使用 read_excel(class="lazy" data-src_file)读取下面这个电子表格样本。

你会得到一些下面这样的东西。

这些结果包括很多 Unnamed的列、行内的标签以及一些我们不需要的额外列。

Pandas解决方案

对于这个数据集,最简单的解决方案是使用 read_excel()​的 header​和 usecols​参数。尤其是 usecols参数,对于控制你想包括的列非常有用。

如果你想继续学习这些例子,文件在github上。

https://github.com/chris1610/pbpython/blob/master/data/shipping_tables.xlsx

下面是一个替代方法,只读取我们需要的数据。

import pandas as pd

from pathlib importPath

class="lazy" data-src_file = Path.cwd() / 'shipping_tables.xlsx'



df = pd.read_excel(class="lazy" data-src_file, header=1, usecols='B:F')

产生的DataFrame只包含我们需要的数据。在这个例子中,我们特意排除了备注栏和日期栏。

usecols​可以接受Excel范围,如 B:F​,并只读入这些列。header​参数期望一个定义列的单一整数。这个值是以0为索引的,所以我们传入 1,尽管这是Excel的第2行。

在某些情况下,我们可能希望将列定义为一个数字列表。在这个例子中,我们可以定义为整数的列表。

df = pd.read_excel(class="lazy" data-src_file, header=1, usecols=[1,2,3,4,5])

如果你对一个大的数据集有某种想要遵循的数字模式(即每3列或只有偶数列),这种方法可能会很有用。

pandas的 usecols也可以接受一个列名的列表。这段代码将创建一个等效的DataFrame。

# Define a more complex function:

def column_check(x):

if'unnamed'in x.lower():

returnFalse

if'priority'in x.lower():

returnFalse

if'order'in x.lower():

returnTrue

returnTrue



df = pd.read_excel(class="lazy" data-src_file, header=1, usecols=column_check)

需要记住的关键概念是,该函数将按名称解析每一列,必须为每一列返回 True​或 False​。那些被评估为 True的列将被包括在内。

另一种使用可调用函数的方法是包含一个 lambda表达式。这里有一个例子,我们想只包括一个定义好的列的列表。我们通过将名称转换为小写字母来进行规范化,以便于比较。

cols_to_use = ['item_type', 'order id', 'order date', 'state', 'priority']

df = pd.read_excel(class="lazy" data-src_file,

header=1,

usecols=lambda x: x.lower() in cols_to_use)

可调用函数给了我们很大的灵活性来处理现实世界中混乱的Excel文件。

区间和表格

在某些情况下,数据在Excel中可以更加模糊不清。在这个例子中,我们有一个叫做 ship_cost的表,我们想读取它。如果你必须处理这样的文件,用我们到目前为止讨论过的pandas选项来读入可能是个挑战。

在这种情况下,我们可以直接使用openpyxl来解析文件并将数据转换成pandas DataFrame。事实上,数据是在一个Excel表格中,可以使这个过程更容易一些。

下面是如何使用openpyxl来读取Excel文件。

from openpyxl import load_workbook

import pandas as pd

from pathlib importPath

class="lazy" data-src_file = class="lazy" data-src_file = Path.cwd() / 'shipping_tables.xlsx'



wb = load_workbook(filename = class="lazy" data-src_file)

这将加载整个工作簿。如果我们想看到所有的工作表。

wb.sheetnames
['sales', 'shipping_rates']

要访问具体的工作表。

sheet = wb['shipping_rates']

要查看所有命名的表的列表。

sheet.tables.keys()
dict_keys(['ship_cost'])

这个键对应于我们在Excel中分配给表的名称。现在我们访问该表,以获得相当于Excel的范围。

lookup_table = sheet.tables['ship_cost']

lookup_table.ref
'C8:E16'

这就成功了。我们现在知道了我们要加载的数据范围。最后一步是将这个范围转换为pandas DataFrame。下面是一个简短的代码片段,用来循环浏览每一行并转换为一个DataFrame。

# Access the data in the table range

data = sheet[lookup_table.ref]

rows_list = []



# Loop through each row and get the values in the cells

for row in data:

# Get a list of all columns in each row

cols = []

for col in row:

cols.append(col.value)

rows_list.append(cols)



# Create a pandas dataframe from the rows_list.

# The first row is the column names

df = pd.DataFrame(data=rows_list[1:], index=None, columns=rows_list[0])

下面是产生的数据框架。

现在我们有了干净的表格,可以用于进一步的计算。

总结

在一个理想的条件下,我们使用的数据应该拥有一个简单一致的格式。在本文的例子中,我们可以很容易地删除行和列,使之更符合格式要求。然而,有些时候,这样做是不可行的,也是不可取的。好消息是,pandas和openpyxl为我们提供了读取Excel数据所需的所有工具。​

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

用 Pandas 处理结构不佳的 Excel 文件

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

用 Pandas 处理结构不佳的 Excel 文件

本文将讨论如何使用pandas和openpyxl来读取这些类型的Excel文件,并干净地将数据转换为适合进一步分析的DataFrame。

使用pandas读取和处理Excel文件的方法

Pandas如何读取Excel文件并处理数据引言:Pandas是一种常用的数据处理和分析工具,它提供了丰富的函数和方法,方便用户对数据进行清洗、转换和分析。在实际工作中,我们经常需要处理Excel格式的数据文件,本文将介绍如何使用Pand
使用pandas读取和处理Excel文件的方法
2024-01-24

提升数据处理效率:使用pandas读取Excel文件的技巧

优化数据处理流程:Pandas读取Excel文件的技巧引言:在数据分析和处理的过程中,Excel是最常见的数据来源之一。然而,Excel文件的读取和处理往往是效率较低的,特别是当数据量较大时。为此,本文将介绍如何使用Python的Pand
提升数据处理效率:使用pandas读取Excel文件的技巧
2024-01-24

数据处理利器:pandas读取Excel文件的高效技巧

随着数据处理的日益普及,越来越多的人开始关注如何高效利用数据,让数据为自己所用。而在日常的数据处理中,Excel表格无疑是最为常见的一种数据格式。然而,当需要处理大量数据时,手动操作Excel显然会变得十分费时费力。因此,本文将介绍一个高效
数据处理利器:pandas读取Excel文件的高效技巧
2024-01-19

一个合理的前端应用文件结构

我们通过实践发现,对于大型项目,这种架构很快就会失控。需要某种模块化方法来轻松定位给定的文件,为各个功能设置边界,并避免组件的紧密耦合。

Node.js利用js-xlsx处理Excel文件的方法详解

简介本文介绍用 Node.js 中的 js-xlsx 库来处理 Excel 文件。 js-xlsx 库是目前 Github 上 star 数量最多的处理 Excel 的库,功能强大,但上手难度稍大。文档有些乱,不适合快速上手。本文对 js-
2022-06-04

在 Go 中处理解耦的最佳方法是在两个不同的包中使用类似的结构,但结构中的子项使其变得困难?

在 Go 中处理解耦的最佳方法是使用类似结构但具有不同子项的两个不同包。这种方法可以有效地将代码分离,提高可维护性和模块化程度。然而,当结构中的子项变得复杂时,这种解耦方法可能会变得困难。在这种情况下,可以考虑使用接口和多态的概念来解决问题
在 Go 中处理解耦的最佳方法是在两个不同的包中使用类似的结构,但结构中的子项使其变得困难?
2024-02-09

如何使用编译时未知的结构处理 JSON 插件配置

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《如何使用编译时未知的结构处理 JSON 插件配置》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学
如何使用编译时未知的结构处理 JSON 插件配置
2024-04-04

怎么用批处理实现的结束进程并删除文件

这篇文章给大家分享的是有关怎么用批处理实现的结束进程并删除文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。代码如下:@echo off title=结束进程并删除文件[Null] echo.请输入进程名: se
2023-06-08

当为 amd64 构建 go 二进制文件时,使用 uname 在 mac 中获取处理器架构会给出错误的结果

php小编西瓜在处理amd64构建go二进制文件时发现了一个问题。在mac系统中,使用uname获取处理器架构会导致错误的结果。这个问题可能会对编译和构建过程产生影响,因此需要注意。正确的获取处理器架构的方法是通过go的内置函数runtim
当为 amd64 构建 go 二进制文件时,使用 uname 在 mac 中获取处理器架构会给出错误的结果
2024-02-09

SQLServer 错误 41365 未计划数据库 %.*ls 事务范围 [%ld,%ld] 的合并要求。 表示范围的检查点文件对合并不可用或是正在进行的合并的一部分。 故障 处理 修复 支持远程

详细信息 Attribute 值 产品名称 SQL Server 事件 ID 41365 事件源 MSSQLSERVER 组件 SQLEngine 符号名称 HK_MERGE_SCHEDULE_ERROR ...
SQLServer 错误 41365 未计划数据库 %.*ls 事务范围 [%ld,%ld] 的合并要求。 表示范围的检查点文件对合并不可用或是正在进行的合并的一部分。 故障 处理 修复 支持远程
2023-11-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录