杰瑞科技汇

Python读取Excel中文数据乱码怎么办?

下面我将为你详细介绍几种主流的 Python Excel 库,并提供处理中文乱码的完整代码示例和最佳实践。

Python读取Excel中文数据乱码怎么办?-图1
(图片来源网络,侵删)

核心问题:编码

  • .xlsx 文件 (Office 2007 及以后版本):这是一种基于 XML 的二进制格式,内部通常使用 UTF-8UTF-16 编码。读取 .xlsx 文件时,基本不会遇到中文乱码问题
  • .xls 文件 (Office 2003 及以前版本):这是一种旧的二进制格式,其编码可能与系统的默认编码有关,在中文版的 Windows 系统上,它通常是 GBKGB2312 编码。读取 .xls 文件时,中文乱码的概率很高

使用 pandas (最推荐)

pandas 是 Python 数据分析的利器,它提供了非常简单易用的接口来处理 Excel 文件,并且能很好地处理中文。

安装

pip install pandas openpyxl
  • openpyxlpandas 读取 .xlsx 文件时需要的引擎。

读取 .xlsx 文件 (通常无需额外处理)

对于 .xlsx 文件,pandas 默认就能正确处理中文。

import pandas as pd
# 文件路径
file_path = 'data_with_chinese.xlsx'
# 使用 pandas 读取 Excel 文件
# sheet_name 可以是工作表名或索引,默认是第一个工作表 (0)
df = pd.read_excel(file_path, sheet_name='Sheet1')
# 打印前5行数据
print(df.head())
# 打印列名
print("\n列名:", df.columns.tolist())

读取 .xls 文件 (需要指定编码)

对于 .xls 文件,你需要使用 xlrd 引擎,并指定 encoding 参数为 gbkgb2312

首先安装 xlrd

Python读取Excel中文数据乱码怎么办?-图2
(图片来源网络,侵删)
pip install xlrd

然后读取文件:

import pandas as pd
# 文件路径
file_path = 'data_with_chinese.xls'
# 使用 pandas 读取 Excel 文件,指定引擎为 xlrd,编码为 gbk
# 如果不行,可以尝试 'gb2312'
df = pd.read_excel(file_path, engine='xlrd', encoding='gbk')
# 打印前5行数据
print(df.head())

使用 openpyxl (适用于 .xlsx)

如果你不想用 pandas,或者需要对 Excel 文件进行更底层的操作,openpyxl 是一个非常好的选择,它专门用于处理 .xlsx 文件。

安装

pip install openpyxl

代码示例

from openpyxl import load_workbook
# 文件路径
file_path = 'data_with_chinese.xlsx'
# 加载工作簿
# data_only=True 表示读取单元格的值而不是公式
wb = load_workbook(filename=file_path, data_only=True)
# 获取活动工作表,或者通过名字指定
# sheet = wb.active
sheet = wb['Sheet1']
# 读取第一行作为表头
headers = []
for cell in sheet[1]: # 第一行
    headers.append(cell.value)
print("表头:", headers)
# 读取所有数据
data = []
for row in sheet.iter_rows(min_row=2): # 从第二行开始
    row_data = []
    for cell in row:
        row_data.append(cell.value)
    data.append(row_data)
# 打印前5行数据
for i in range(min(5, len(data))):
    print(data[i])

使用 xlrd (适用于 .xls)

xlrd 是专门用于读取旧版 .xls 文件的库。

安装

pip install xlrd

代码示例

import xlrd
# 文件路径
file_path = 'data_with_chinese.xls'
# 打开工作簿,指定编码
# encoding_override='gbk' 是解决中文乱码的关键
workbook = xlrd.open_workbook(file_path, encoding_override='gbk')
# 获取第一个工作表
sheet = workbook.sheet_by_index(0)
# 读取表头
headers = sheet.row_values(0) # 第一行的值
print("表头:", headers)
# 读取所有数据
data = []
for i in range(1, sheet.nrows): # 从第二行开始遍历
    row_data = sheet.row_values(i)
    data.append(row_data)
# 打印前5行数据
for i in range(min(5, len(data))):
    print(data[i])

最佳实践与总结

场景 推荐库 关键代码/参数 备注
.xlsx 文件 pandas df = pd.read_excel('file.xlsx') 最简单,推荐首选。openpyxl 也可以,但代码稍复杂。
.xls 文件 pandas + xlrd df = pd.read_excel('file.xls', engine='xlrd', encoding='gbk') pandas 封装得很好,推荐使用。encoding 是关键。
复杂 .xlsx 操作 openpyxl wb = load_workbook('file.xlsx') 如果需要修改样式、合并单元格等,openpyxl 更强大。

通用建议

  1. 首选 pandas:对于绝大多数读取、分析和处理数据的任务,pandas 是最方便、最高效的选择。
  2. 明确文件类型:首先确认你的 Excel 文件是 .xlsx 还是 .xls,这决定了你使用哪个引擎。
  3. 处理 .xls 时指定编码:如果遇到乱码,尤其是处理 .xls 文件时,请务必加上 encoding='gbk'encoding='gb2312' 参数。
  4. 检查数据:读取后,打印几行数据和列名,确保中文显示正常。
  5. 保存文件:如果你需要将处理后的数据写回 Excel,同样推荐使用 pandasto_excel 方法,它会自动处理编码,保存为 .xlsx 格式,避免新的乱码问题。
    # 将 DataFrame 保存为新的 Excel 文件
    df.to_excel('output_with_chinese.xlsx', index=False, encoding='utf-8')

希望这份详细的指南能帮助你顺利地在 Python 中处理包含中文的 Excel 文件!

分享:
扫描分享到社交APP
上一篇
下一篇