Python处理Excel 的常用操作详解

要在Python中处理Excel文件,可以使用openpyxl库来处理.xlsx文件,或者使用xlrd和xlwt(或其升级版openpyxl)来处理.xls文件。

请注意,你需要先安装 pandasopenpyxl 库才能运行代码。可以使用以下命令安装:

pip install pandas openpyxl
  1. 读取 Excel 文件
    使用 pandas.read_excel() 函数可以读取 Excel 文件。

    import pandas as pd# 读取 Excel 文件
    df = pd.read_excel('path_to_your_excel_file.xlsx')
    print(df)
    
  2. 写入数据到 Excel
    使用 DataFrame.to_excel() 方法可以将数据写入 Excel 文件。

    # 写入数据到 Excel
    df.to_excel('output_file.xlsx', index=False)
    
  3. 选择特定的列
    使用列名来选择 DataFrame 中的列。

    # 选择特定的列
    selected_columns = df[['column1', 'column2']]
    print(selected_columns)
    
  4. 筛选数据
    使用布尔索引来筛选数据。

    # 筛选数据
    filtered_data = df[df['column1'] > value]
    print(filtered_data)
    
  5. 添加新列
    可以直接通过赋值来添加新列。

    # 添加新列
    df['new_column'] = df['existing_column'] * 2
    print(df)
    
  6. 删除列
    使用 drop 方法来删除列。

    # 删除列
    df = df.drop('column_to_drop', axis=1)
    print(df)
    
  7. 保存修改后的 DataFrame
    使用 to_excel 方法保存修改后的 DataFrame。

    # 保存修改后的 DataFrame
    df.to_excel('modified_file.xlsx', index=False)
    
  8. 处理大型 Excel 文件
    如果 Excel 文件非常大,可以使用 dtype 参数指定列的数据类型来减少内存使用。

    # 处理大型 Excel 文件
    df = pd.read_excel('large_file.xlsx', dtype={'column1': 'int32'})
    
  9. 使用 openpyxl 引擎
    对于 .xlsx 文件,pandas 默认使用 xlrd 引擎,但你也可以使用 openpyxl 引擎。

    # 使用 openpyxl 引擎
    df = pd.read_excel('file.xlsx', engine='openpyxl')
    
  10. 合并多个 Excel 工作表
    使用 ExcelFile 类来读取整个 Excel 文件,然后可以访问不同的工作表。

    # 合并多个 Excel 工作表
    excel = pd.ExcelFile('multiple_sheets.xlsx')
    sheet1 = excel.parse('Sheet1')
    sheet2 = excel.parse('Sheet2')
    combined_df = pd.concat([sheet1, sheet2], ignore_index=True)
    print(combined_df)
    

当然,除了上述基本操作之外,pandas 还提供了许多高级功能来处理 Excel 数据。以下是一些额外的操作和代码示例:

  1. 设置 Excel 文件的编码
    有时 Excel 文件可能使用特定的编码,可以通过设置 encoding 参数来读取。

    # 设置 Excel 文件的编码
    df = pd.read_excel('file.xlsx', encoding='utf-8')
    
  2. 读取特定工作表
    默认情况下,pandas 读取第一个工作表。你可以指定 sheet_name 参数来读取特定的工作表。

    # 读取特定工作表
    df = pd.read_excel('file.xlsx', sheet_name='Sheet2')
    
  3. 跳过行和列
    使用 skiprowsusecols 参数来跳过行和选择列。

    # 跳过行和列
    df = pd.read_excel('file.xlsx', skiprows=1, usecols=['column1', 'column2'])
    
  4. 处理日期和时间
    如果 Excel 文件包含日期和时间数据,可以使用 parse_dates 参数来确保正确解析。

    # 处理日期和时间
    df = pd.read_excel('file.xlsx', parse_dates=['date_column'])
    
  5. 数据分组和聚合
    使用 groupby 方法对数据进行分组,并使用聚合函数如 sum, mean 等。

    # 数据分组和聚合
    grouped_data = df.groupby('group_column').sum()
    print(grouped_data)
    
  6. 数据重塑
    使用 pivot_table 方法进行数据重塑。

    # 数据重塑
    pivot_table = pd.pivot_table(df, values='value_column', index='row_column', columns='column_column', aggfunc='mean')
    print(pivot_table)
    
  7. 条件过滤
    使用 query 方法进行复杂的条件过滤。

    # 条件过滤
    filtered_data = df.query('column1 > value & column2 < another_value')
    print(filtered_data)
    
  8. Excel 文件的样式和格式
    使用 openpyxl 库,你可以设置 Excel 文件的样式和格式。

    from openpyxl import load_workbook
    from openpyxl.styles import Font, Border, Alignment, PatternFill# 加载 Excel 文件
    wb = load_workbook('file.xlsx')
    ws = wb.active# 设置单元格样式
    for cell in ws['A']:cell.font = Font(bold=True)cell.border = Border(left=1, right=1, top=1, bottom=1)cell.alignment = Alignment(horizontal='center', vertical='center')cell.fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')# 保存文件
    wb.save('styled_file.xlsx')
    
  9. 批量读取和写入 Excel 文件
    使用循环可以批量处理多个 Excel 文件。

    # 批量读取和写入 Excel 文件
    files = ['file1.xlsx', 'file2.xlsx', 'file3.xlsx']
    for file in files:df = pd.read_excel(file)# 处理数据df.to_excel(f'processed_{file}', index=False)
    
  10. 使用 xlwings 进行更高级的 Excel 操作
    xlwings 是另一个库,可以提供与 Excel 的更深层次的交互,如调用宏、修改公式等。

    import xlwings as xw# 连接到 Excel 文件
    wb = xw.Book('file.xlsx')
    ws = wb.sheets['Sheet1']# 读取和写入数据
    data = ws.range('A1').api.Value
    ws.range('B1').api.Value = 'New Value'# 保存并关闭
    wb.save()
    wb.close()
    

请注意,xlwings 需要在电脑上安装 Excel 应用程序。你可以使用以下命令安装 xlwings

pip install xlwings
  1. 合并多个 Excel 文件
    如果需要合并多个 Excel 文件到一个 DataFrame,可以使用循环和 concat 函数。
# 合并多个 Excel 文件
file_names = ['file1.xlsx', 'file2.xlsx', 'file3.xlsx']
dfs = [pd.read_excel(file) for file in file_names]
combined_df = pd.concat(dfs, ignore_index=True)
print(combined_df)
  1. 处理 Excel 文件中的公式
    默认情况下,pandas 会计算 Excel 文件中的公式。如果需要保留公式,可以使用 data_only=True
# 处理 Excel 文件中的公式
df = pd.read_excel('file_with_formulas.xlsx', data_only=True)
  1. 使用 dtype 避免数据类型问题
    当 Excel 文件包含混合数据类型时,可以显式指定列的数据类型。
# 使用 dtype 避免数据类型问题
dtypes = {'column1': 'int32', 'column2': 'float32'}
df = pd.read_excel('file.xlsx', dtype=dtypes)
  1. 处理 Excel 文件的合并单元格
    pandas 通常不会保留合并单元格的信息。如果你需要处理合并单元格,可能需要使用 openpyxl
# 使用 openpyxl 处理合并单元格
from openpyxl import load_workbookwb = load_workbook('file_with_merged_cells.xlsx')
ws = wb.active
for merged_cell in ws.merged_cells.ranges:cell = ws.cell(row=merged_cell.min_row, column=merged_cell.min_col)print(cell.coordinate, cell.value)
  1. 使用 ExcelWriter 保存 DataFrame
    ExcelWriter 可以保存一个或多个 DataFrame 到不同的工作表。
# 使用 ExcelWriter 保存 DataFrame
with pd.ExcelWriter('multiple_sheets.xlsx', engine='openpyxl') as writer:df1.to_excel(writer, sheet_name='Sheet1')df2.to_excel(writer, sheet_name='Sheet2')
  1. 设置 Excel 单元格的格式
    使用 style 函数可以设置 Excel 单元格的格式。
# 设置 Excel 单元格的格式
style = {'font': {'color': 'blue', 'bold': True},'borders': {'top': 'thin', 'bottom': 'thin', 'left': 'thin', 'right': 'thin'},'alignment': {'horizontal': 'center', 'vertical': 'top'}}
df.style.applymap(style).to_excel('styled_excel.xlsx', engine='openpyxl')
  1. 使用 pivot 进行数据透视
    pivot 方法可以用来创建数据透视表。
# 使用 pivot 进行数据透视
pivot_df = df.pivot(index='row_column', columns='column_column', values='value_column')
print(pivot_df)
  1. 使用 melt 重塑 DataFrame
    melt 方法可以将宽格式的 DataFrame 转换为长格式。
# 使用 melt 重塑 DataFrame
melted_df = df.melt(id_vars=['id_column'], value_vars=['column1', 'column2'], var_name='column_name', value_name='value')
print(melted_df)
  1. Excel 文件的版本控制
    如果你需要处理不同版本的 Excel 文件,可以使用 pd.read_excel()if_sheet_exists 参数。
# Excel 文件的版本控制
df = pd.read_excel('file.xlsx', if_sheet_exists='Sheet2')
  1. 处理 Excel 文件的超链接
    openpyxl 可以读取和修改 Excel 文件中的超链接。
# 处理 Excel 文件的超链接
from openpyxl.worksheet.hyperlink import Hyperlinkwb = load_workbook('file_with_hyperlinks.xlsx')
ws = wb.active
for cell in ws.hyperlinks:print(cell.ref, cell.target)
  1. 使用 eval 读取 Excel 文件中的公式结果
    如果你需要读取 Excel 文件中公式的计算结果,可以使用 openpyxl 引擎并设置 engine='openpyxl'mode='values'
df = pd.read_excel('file_with_formulas.xlsx', engine='openpyxl', mode='values')
  1. Excel 文件的列宽和行高调整
    使用 openpyxl 可以调整 Excel 文件的列宽和行高。
from openpyxl import Workbook
from openpyxl.utils import get_column_letterwb = Workbook()
ws = wb.active
ws['A1'] = 'Test'
ws.column_dimensions['A'].width = 20  # 设置列宽
ws.row_dimensions[1].height = 30     # 设置行高wb.save('adjusted_dimensions.xlsx')
  1. Excel 文件的排序
    使用 sort_values 方法可以对 DataFrame 进行排序。
# Excel 文件的排序
sorted_df = df.sort_values(by='column_to_sort', ascending=True)
sorted_df.to_excel('sorted_file.xlsx', index=False)
  1. Excel 文件的分组排序
    结合 groupbysort_values 可以对数据进行分组排序。
# Excel 文件的分组排序
grouped_sorted_df = df.groupby('group_column').apply(lambda x: x.sort_values(by='sort_column'))
grouped_sorted_df.to_excel('grouped_sorted_file.xlsx', index=False)
  1. Excel 文件的缺失数据处理
    使用 dropnafillna 方法可以处理 DataFrame 中的缺失数据。
# Excel 文件的缺失数据处理
clean_df = df.dropna(subset=['important_column'])  # 删除含有缺失值的行
# 或者
filled_df = df.fillna(value={'default_value_column': 'default_value'})  # 填充缺失值
  1. Excel 文件的异常值检测
    使用统计方法或可视化方法可以检测数据中的异常值。
# Excel 文件的异常值检测
q1 = df['column'].quantile(0.25)
q3 = df['column'].quantile(0.75)
iqr = q3 - q1
outliers = df[(df['column'] < (q1 - 1.5 * iqr)) | (df['column'] > (q3 + 1.5 * iqr))]
  1. Excel 文件的多条件筛选
    使用 query 方法可以进行多条件筛选。
# Excel 文件的多条件筛选
multi_filtered_df = df.query("(column1 > value1) & (column2 < value2)")
  1. Excel 文件的复杂数据类型处理
    对于包含复杂数据类型(如嵌套列表或字典)的 Excel 文件,可以使用 converters 参数。
converters = {'complex_column': lambda s: eval(s) if s != 'nan' else None
}
df = pd.read_excel('file_with_complex_data.xlsx', converters=converters)
  1. Excel 文件的多索引处理
    使用 set_indexreset_index 方法可以创建或重置多级索引。
# Excel 文件的多索引处理
multi_index_df = df.set_index(['index_column1', 'index_column2'])
multi_index_df.to_excel('multi_index_file.xlsx', index=True)
# 重置索引
reset_df = multi_index_df.reset_index()
  1. Excel 文件的动态数组支持
    如果你使用的是 Excel 365,可以使用动态数组功能。pandas 可以通过 openpyxl 引擎读取这些数组。
df = pd.read_excel('file_with_spill.xlsx', engine='openpyxl')
  1. Excel 文件的图表和图像处理
    使用 openpyxl 可以添加或修改 Excel 文件中的图表和图像。
from openpyxl.drawing.image import Image
from openpyxl.chart import BarChart, Referenceimg = Image('path_to_image.png')
img.width = 100
img.height = 100
ws.add_image(img, 'A1')# 添加图表
data = Reference(ws, min_col=1, min_row=1, max_col=1, max_row=10)
bar_chart = BarChart(data)
ws.add_chart(bar_chart, 'G2')
  1. Excel 文件的宏和VBA代码处理
    使用 xlwings 可以运行 Excel 文件中的宏和VBA代码。
import xlwings as xwwb = xw.Book('file_with_macros.xlsm')
wb.macro('ModuleName.MacroName')
wb.save()
wb.close()
  1. Excel 文件的密码保护处理
    使用 openpyxl 可以设置或修改 Excel 文件的密码。
from openpyxl.worksheet.protection import SheetProtectionprotection = SheetProtection(sheet=ws, password="your_password")
  1. Excel 文件的自定义函数
    使用 xlwings 可以创建自定义函数并在 Excel 中使用。
import xlwings as xw@xw.func
@xw.arg('num', int)
@xw.ret(int)
def custom_function(num):return num * 2wb = xw.Book('file.xlsx')
wb.apis['custom_function'] = custom_function
wb.save()
wb.close()
  1. Excel 文件的自动化测试
    使用 xlwings 可以自动化测试 Excel 文件。
import xlwings as xwwb = xw.Book('test_file.xlsm')
test_results = wb.macro('RunAllTests')
print(test_results)
wb.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/36834.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

静态类和静态构造函数

静态类 概念 用static修饰的类。 特点 只能包含静态成员&#xff0c;不能被实例化。 作用 1.将常用的静态成员写在静态类中方便使用。 2.静态类不能被实例化&#xff0c;更能体现工具类的唯一性。 比如&#xff1a;Console就是一个静态类。 静态构造函数 概念 在构造…

springboot系列七: Lombok注解,Spring Initializr,yaml语法

老韩学生 LombokLombok介绍Lombok常用注解Lombok应用实例代码实现idea安装lombok插件 Spring InitializrSpring Initializr介绍Spring Initializr使用演示需求说明方式1: IDEA创建方式2: start.spring.io创建 注意事项和说明 yaml语法yaml介绍使用文档yaml基本语法数据类型字面…

C# 日志框架Serilog使用

1、框架和说明 C#日志框架Serilog支持多种场景输出&#xff0c;简单验证了一下&#xff0c;比较方便 包的安装&#xff0c;推荐直接使用“推荐NuGet包管理器”安装Serilog.AspNetCore&#xff0c;常见的组件都已经集成在一个包中&#xff0c;使用比较方便 2、配置文件 Serilog…

Rethinking Semantic Segmentation: A Prototype View 2022CVPR Oral

流行的语义分割方案的掩码解码策略&#xff08;基于参数softmax或基于像素查询&#xff09;视为可学习的类原型。本研究揭示了这种参数分割策略的几个局限性&#xff0c;并提出了一种基于不可学习原型的非参数替代方案。与之前的方法以完全参数化的方式为每个类学习单个权重/查…

【代码随想录算法训练营第五十二天|647.回文子串、516.最长回文子序列】

文章目录 647.回文子串动态规划双指针法 516.最长回文子序列 647.回文子串 动态规划 dp[i][j]指的是s[i:j1]这段是否是回文串&#xff0c;如果s[i]s[j]需要分三种情况来判断&#xff0c;如果ij或者ji1&#xff0c;那么就是回文串&#xff0c;否则还要看这中间的是否是回文串&…

Kubernetes面试整理-如何利用PodSecurityPolicies来提高集群的安全性?

PodSecurityPolicy (PSP) 是 Kubernetes 中用于定义和控制 Pod 安全配置的策略。通过 PSP,可以设置对 Pod 的一些安全约束条件,从而提高集群的安全性。虽然 PSP 从 Kubernetes 1.21 开始已被弃用,并在 1.25 版本中移除,但在一些旧版 Kubernetes 集群中,PSP 仍然是一个重要…

ubuntu22.04编译安装tesseract

1、 为什么用自己编译安装&#xff0c;而不采用apt安装&#xff1f; 由于tesseract有很多依赖包&#xff0c;直接用deb包或者rpm包等安装包安装很复杂&#xff0c;不一定能成功安装。 2、安装基本的依赖包 sudo apt update sudo apt install g autoconf automake libtool pkg…

Docker-Compose一键部署项目

Docker-Compose一键部署项目 目录 Docker-Compose一键部署项目介绍部署Django项目项目目录结构 docker-compose.ymlnginx的default.conf文件后端Dockerfile文件mysql.env一键部署DNS域名解析引起的跨域问题 介绍 Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的…

如何排查Java应用的死锁

排查Java应用中的死锁问题是一个复杂但重要的任务&#xff0c;因为死锁会导致应用程序停止响应&#xff0c;影响用户体验和系统稳定性。以下是一些方法和步骤&#xff0c;帮助你排查Java应用中的死锁。 1. 理解死锁的概念 在计算机科学中&#xff0c;死锁是指两个或多个线程相…

新手向导:掌握Axure RP的第一步

其实很多时候&#xff0c;我们很容易把教程做得太复杂&#xff0c;让学生失去重点被复杂的理论吓到。入门基础的时候只需要先弄清楚两个核心内容&#xff0c;学起来就容易多了:一是简单了解这个软件&#xff0c;二是学习这个软件的基本操作。所以如果你问我什么是好的 Axure RP…

cesium升级到116版本后底图和地形加载问题

cesium在2023-07-03 升级到了107版本&#xff0c;107版本加载底图和地形方式做了变更&#xff0c;之前的imageryProvider 和 CesiumTerrainProvider方式被remove掉了&#xff0c;换了另外方式。变更如下所示&#xff1a; cesium/CHANGES.md at 1.116 CesiumGS/cesium GitHub…

【QCustomPlot实战系列】QCPGraph折线图的渐变

包含折线图渐变效果以及QCPAxisTickerDateTime的使用 static QBrush GenerateLinearBrush(Qt::Orientation orientation) {qreal x 1;qreal y 0;if (orientation Qt::Vertical) {x0;y1.5;}QLinearGradient gradient(0, y, x, 0);gradient.setCoordinateMode(QLinearGradie…

USB描述符的一些解释

USB设备描述符、配置描述符和一些数据缓冲区的数组。让我们逐步解析这些数组中的值。 设备描述符 (Device Descriptor) UINT8C DevDesc[18] = {0x12, 0x01, 0x10, 0x01, 0xff, 0x00, 0x02, 0x08,0x86, 0x1a, 0x23, 0x55, 0x04, 0x03, 0x00, 0x00,0x00, 0x01};0x12 (18): 设备…

Spring Boot中的分布式缓存方案

Spring Boot中的分布式缓存方案 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨在Spring Boot应用中实现分布式缓存的方案&#xff0c;以提升系统…

软件需求管理规程(DOC原件)

软件需求管理规程是确保软件开发过程中需求清晰、一致、可追踪的关键环节&#xff1a; 明确需求&#xff1a;项目初期&#xff0c;与利益相关者明确项目目标和需求&#xff0c;确保需求完整、无歧义。需求评审&#xff1a;组织专家团队对需求进行评审&#xff0c;识别潜在风险和…

解释Java中的接口和抽象类的使用场景。

在Java中&#xff0c;接口和抽象类是两种特殊的类类型&#xff0c;它们各自有不同的使用场景。 **接口&#xff08;Interface&#xff09;** 接口是一种契约&#xff0c;它定义了一组方法的契约&#xff0c;这些方法在实现类中必须实现。它们常常被用来定义一种规范或者标准&…

【前端】前端文件下载方式盘点

前端文件下载方式盘点 在前端开发中&#xff0c;文件下载是一个常见的功能需求。本文将介绍几种常见的前端文件下载方式&#xff0c;分析各自的优缺点&#xff0c;并提供具体的实现代码。 1. 使用 HTML 的 <a> 标签 优点 简单易用&#xff0c;适用于下载静态文件。浏…

【SQL】⼀条更新语句的执行流程

在关系型数据库管理系统&#xff08;RDBMS&#xff09;中&#xff0c;一条更新语句&#xff08;例如UPDATE语句&#xff09;的执行流程涉及多个步骤&#xff0c;以确保数据的一致性、完整性和高效性。以下是典型的更新语句执行流程的概述&#xff1a; 解析&#xff08;Parsing&…

CPU的核心和线程怎么理解,选购机器如何考虑CPU性能

CPU的核心和线程是计算机处理器的两个重要概念。 CPU核心&#xff1a;CPU核心是指CPU内部实际执行指令的独立单元&#xff0c;每个核心可以独立处理任务。一个CPU可以有一个或多个核心&#xff0c;多核心CPU可以同时处理多个任务&#xff0c;提高计算机的性能。例如&#xff0c…

huggingface加速下载模型

文章目录 所需环境huggingface-cli 用法登录token 获取 huggingface 镜像huggingface 缓存hf-transfer 拉满下载带宽如果开了的话&#xff0c;记得关掉科学上网&#xff01;&#xff01;&#xff01; 所需环境 python huggingface-cli 用法 huggingface-cli的更多用法点击这…