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

​简介

用pandas很容易读取Excel文件并将数据转换为DataFrame。然而现实世界中的Excel文件往往构造不佳,在那些数据散落在工作表中的情况下,你可能需要定制读取数据的方式。本文将讨论如何使用pandas和openpyxl来读取这些类型的Excel文件,并干净地将数据转换为适合进一步分析的DataFrame。

问题

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

比如当你尝试使用 read_excel(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

src_file = Path.cwd()/'shipping_tables.xlsx'



df = pd.read_excel(src_file, header=1, usecols='B:F')

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

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

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

df = pd.read_excel(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(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(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

src_file = src_file = Path.cwd()/'shipping_tables.xlsx'



wb = load_workbook(filename = 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 valuesin 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数据所需的所有工具。​

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/230671.html<

(0)
管理的头像管理
上一篇2025-04-19 08:25
下一篇 2025-04-19 08:26

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注