首页 > 其他分享 >pandas读取和写入excel表格

pandas读取和写入excel表格

时间:2025-01-17 11:24:38浏览次数:1  
标签:engine None sheet 读取 na excel DataFrame pandas

读取 excel 表格

pandas.read_excel()函数

read_excel()函数用于读取Excel文件并将其转换为Pandas的DataFrame对象。这是处理Excel数据的基础。函数原型如下:

pandas.read_excel(io, sheet_name=0, *, header=0, names=None, index_col=None, usecols=None, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, parse_dates=False, date_parser=<no_default>, date_format=None, thousands=None, decimal='.', comment=None, skipfooter=0, storage_options=None, dtype_backend=<no_default>, engine_kwargs=None)

  • io:为文件类对象,一般作为读取文件的路径,支持类型:str、bytes、ExcelFile、xlrd.Book、path object、file-like object
  • sheet_name=0:指定excel某张表。sheet_name可以是str、int、list 或 None类型。默认值0表示默认读取第一张表。
    • 【例】sheet_name="A" # 读取A表,返回的是DataFrame
    • 【例】sheet_name=None # 读取所有的表,返回的是字典。key为表名,value为DataFrame
    • 【例】sheet_name=[0, "A", "B"]  # 读取第一张表和A表B表,返回的是字典。
  • header=0:指定某一行作为表头,默认值表示指定第一行为标题行
    • 【例】header=[] # 主要针对复合表头的情况
    • 【例】header=None  #设置为从0递增的数作为表头,适合原Excel表没有列名的情况,文件里有列名的情况下,列名也被当成了数据
  • names=None:此参数接收一个数组,将列名重定义赋值,默认值None表示不做操作,设置列名,必须是list类型,且长度和列数一致
    • 【例】names=["L1", "L2", "L3", "L4", "L5", "L6"]
  • index_col=None:指定哪一列做索引,默认值是None表示重新设置一列成为index值
    • 【例】index_col=0 # 指定第1列作为索引列
  • usecols=None:选择读取一张表中的指定列,默认值None表示选择表中的所有列。
    • 【例】usecols=[0, 2] # 读取第一列和第三列
    • 【例】usecols="A, C, E:F" # 取 A和C列,再加E到F列
    • 【例】usecols='A, B'  # 取 A 和 B 两列
    • 【例】usecols='B:D'  # 取 B 到 D 列
    • 【例】usecols=['name', 'province']  # 取指定列名的列
    • 【例】usecols=lambda x: 'p' in x # 表头包含 p 的
  • dtype=None:设置列的类型,指定读取列的数据类型,可接收字典,若指定了"converters"参数,则dtype函数失效。
    • 【例】dtype={"phone_number": np.float64, "value": np.float64})
  • engine=None:该参数为指定Excel处理引擎,一般Excel处理引擎为xlrd、openpyxl、odf
    • 【例】engine='xlrd' # 支持旧式的Excel文件,如xls文件。pandas1.2.0发生变化,xlrd引擎现在只支持解析xls文件。
    • 【例】engine='openpyxl' # 支持较新的Excel文件格式。
    • 【例】engine='odf' # 支持OpenDocument文件格式如odf,ods,odt。
    • 【例】engine='pyxlsb' # 支持二进制Excel文件。
  • converters=None:按指定函数解析,指定列数据类型转换函数,包括了dtype的功能,也可以对某一列使用Lambda函数,进行某种运算,和usecols参数连用
    • 【例】converters={"name": lambda x: "沪" + x, "age": lambda x: x+1})
    • 【例】converters={0: lambda x: x+5, 1: lambda x: x + "市"}) # 0代表usecols=[1, 3]中的索引号
  • true_values=None:传输一个列表判断为true或是false
  • false_values=None:传输一个列表判断为true或是false
  • skiprows=None:跳过某一行,默认值None标识不操作
    • 【例】skiprows=4 # 跳过前 4 行,会把首行列名也跳过
    • 【例】skiprows=[0, 9] # 跳过第一行和第十行
    • 【例】skiprows=lambda x:x%2==0 # 仅取偶数行
    • 【例】skiprows=range(1, 10) # 跳过 [1,10) 行,不包括第10行,可以留下首行列名
  • nrows=None:int类型,默认None。指定要读取的行数数量上限,通常用于较大的数据文件中。
    • 【例】nrows=10
  • na_values=None:将指定的值或者传入中的列表中的值设置为NaN,这个参数不受 keep_default_na 值的影响
    • 【例】na_values="山西省" # 表示将所有数据中 山西省 全部替换为NaN
    • 【例】na_values=["山西省", "江西省"]  # 表示将所有数据中 山西省、江西省 全部替换为NaN
    • 【例】na_values={"province": ["山西省", "江西省"]}  # 表示将province列中所有的 山西省、江西省 全部替换为NaN
  • keep_default_na=True:是否将缺失值转换成NaN值,依赖na_values参数是否被传递,默认为True,即自动识别空值导入。注意,如果na_filter传入为False,则keep_default_na和na_values参数将被忽略。
    • 【例】keep_default_na=True  # 默认为True,将缺失值转换成 NaN 值,如果keep_default_na为True,并且未指定na_values,则只将默认的NaN值解析为空值。
    • 【例】keep_default_na=False  # 缺失值将保留原始值,若keep_default_na为False,并且指定na_values,则只将na_values指定的值解析为空值。未指定na_values,则不会将任何字符串解析为空值。
  • na_filter=True:检测缺少的值标记。当数据中没有任何空值时,na_filter设置为False可以提高处理速度,特别是处理大文件时。
    • 【例】na_filter=True  # 默认检测,如果判定为缺失值,那么值将被修改为 NaN
    • 【例】na_filter=False  # 表示不检测,在没有空值的情况下能提升性能,如果 na_filter 的值为False,那么参数 keep_default_na 和 na_values 参数将会失效
  • verbose=False:是否打印非数值列中缺失值的数量,默认不打印
  • parse_dates=False:解析成 datetime64 类型,支持类型:bool、list、dict,默认不操作
    • 【例】parse_dates=True  # 把索引列解析成 datetime64 类型
    • 【例】parse_dates=[1,2] or ['a', 'b'] # 分别解析第 1,2 列为 datetime64
    • 【例】parse_dates=[[1,2]]  # 合并第 1,2 列,然后解析为 datetime64
    • 【例】parse_dates={'date': [1,2]}  # 合并第 1,2 列,然后解析为 datetime64 并取列名 'date'
  • date_parser=<no_default>,设置处理日期数据的函数,利用lambda函数,将某个字符串列,解析为日期格式,具体解析哪些列取决于parse_dates指定的参数
    • 【例】date_parser=lambda x: pd.datetime.strptime(x, '%Y年%m月%d号')
    • 【例】date_parser=lambda x: pd.to_datetime(x, format="%Y年%m月%d号")
  • date_format=None:如果与parse_dates结合使用,将根据此格式解析日期。对于更复杂的情况,请以对象的形式读入,然后根据需要应用to_datetime()。
  • thousands=None
  • decimal='.':识别为小数点的字符。注意,此参数仅对Excel中存储为TEXT的列必须,其他任何数值列都会自动解析,无论显示格式如何。
  • comment=None:指定注释符,其后面的内容将不会被读取,指定一个字符串为注释符,比如 '#', 那么在带 '#' 的行中,'#' 及后面的数据全部不会被读取
  • skipfooter=0:int类型,默认0。自下而上,从尾部指定跳过行数的数据
    • 【例】skipfooter=5 # 从尾部少读5行
  • storage_options=None:对特定存储连接(例如主机、端口、用户名、密码等)有意义的额外选项。
  • dtype_backend=<no_default>
  • engine_kwargs=None

写入 excel 表格

有时候我们需要把DataFrame输出到excel表格进行存储,可以使用下面这些方式操作。

(1)使用pandas的to_excel方法

这是最直接的方法,可以直接使用to_excel函数将DataFrame保存为Excel文件:

# 创建一个示例 DataFrame
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)
# 将DataFrame存入Excel文件
df.to_excel(excel_writer='output.xlsx', sheet_name='Sheet1', index=False)

(2)使用pandas的ExcelWriter和to_excel

class ExcelWriter(path, engine=None, date_format=None, datetime_format=None, mode="w", storage_options=None, if_sheet_exists=None, engine_kwargs=None)

描述:将 DataFrame 对象写入 Excel 表格的类。

参数说明:

  • path:指定要写入的 Excel 文件的路径。
  • engine:指定用于写入 Excel 文件的引擎。注意只能作为关键字参数传递。默认为 None,此时 pandas 会尝试自动选择引擎。
    • 【例】engine='xlsxwriter'  # 用于 .xlsx 文件
    • 【例】engine='openpyxl'  # 用于 .xlsx 文件
    • 【例】engine='odswriter'  # 用于 .ods 文件
    • 【例】engine='xlwt '  # 用于 .xls 文件
  • date_format:为写入Excel文件的日期格式化字符串(例如:"YYY-MM-DD")
  • datetime_format:为写入Excel文件的日期对象格式化字符串(例如:"YY-MM-DDHH:MM:SS")
  • mode:写入模式或追加模式,追加模式不适用于fsspec URLs
    • 【例】mode='w'  # 表示写入模式(会覆盖文件)
    • 【例】mode='a'  # 表示追加模式(如果文件不存在会创建一个新文件,但只能在现有工作表后添加新工作表,不能修改现有数据)。注意,并不是所有引擎都支持 'a' 模式。
  • storage_options:用于传递给文件存储后端的参数。例如,当使用支持远程存储的引擎时(如通过 fsspec),可以通过这个参数指定存储选项。默认为 None。
  • if_sheet_exists:指定当尝试写入的工作表已存在时的行为。(仅限追加模式)应采取的行动。
    • 【例】if_sheet_exists='error'  # 引起值错误。
    • 【例】if_sheet_exists='new'  # 创建一个新工作表,名称由引擎决定。
    • 【例】if_sheet_exists='replace'  # 在写入表格之前删除表格中的内容。
    • 【例】if_sheet_exists='overlay'  # 将多个 df 写入到同一个sheet页。
  • engine_kwargs:一个字典,用于传递给指定引擎的额外关键字参数。这允许你配置引擎特定的选项。

返回值:一个实例化对象。

ExcelWriter是一个上下文管理器,允许我们使用类似文件的接口保存多个DataFrame到不同的Excel工作表,以下的方法可以将不同的表格存入到不同的工作簿中。

# 创建一个示例DataFrame
df1 = pd.DataFrame({'Column1': [1, 2, 3], 'Column2': ['A', 'B', 'C']})
df2 = pd.DataFrame({'Column1': [4, 5, 6], 'Column2': ['D', 'E', 'F']})
# 使用ExcelWriter保存多个DataFrame到不同的工作表
with pd.ExcelWriter(path='output.xlsx', engine='openpyxl') as writer:
    df1.to_excel(writer, sheet_name='Sheet1', index=False)
    df2.to_excel(writer, sheet_name='Sheet2', index=False)

使用for循环,遍历多个dataframe存入excel的不同的sheet页:

# 创建一个示例DataFrame
df1 = pd.DataFrame({'Column1': range(5), 'Column2': range(5, 10)})
df2 = pd.DataFrame({'Column1': range(10, 15), 'Column2': range(10, 15)})
df3 = pd.DataFrame({'Column1': range(20, 25), 'Column2': range(20, 25)})
dataframes = [df1, df2, df3]
with pd.ExcelWriter(path='output.xlsx') as writer:  # 读取excel表,写在最外层
    for i in range(len(dataframes)):  # for循环获取多个dataframe遍历
        sheet_name = "sheet_" + str(i)  # 起不同的表名
        df = dataframes[i]
        df.to_excel(writer, sheet_name=sheet_name, index=False)

当然我们在写入的时候如果想做一些其他的设置(比如添加样式、设置列宽等),可以通过指定引擎,再接着进行操作,例如:

import pandas as pd
from openpyxl import Workbook
from openpyxl.styles import PatternFill

with pd.ExcelWriter(path='output.xlsx', engine='openpyxl') as writer:
    df.to_excel(writer, index=False, sheet_name='Sheet1')
    # 获取当前工作簿和工作表
    workbook = writer.book
    worksheet = writer.sheets['Sheet1']
    # 定义填充颜色
    fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')  # 黄色背景
    # 为指定列(例如列 'A',即第1列)添加颜色
    for row in range(2, len(df) + 2):  # 从第二行开始(第一行是标题)
        worksheet[f'A{row}'].fill = fill  # 指定添加颜色的单元格

(3)使用StyleFrame库的ExcelWriter和to_excel

df1 = pd.DataFrame({'Column1': [1, 2, 3], 'Column2': ['A', 'B', 'C']})
df2 = pd.DataFrame({'Column1': [4, 5, 6], 'Column2': ['D', 'E', 'F']})
with StyleFrame.ExcelWriter(path='output.xlsx') as writer:
    df1.to_excel(writer, index=False, sheet_name='sheet1')
    df2.to_excel(writer, index=False, sheet_name='sheet2')

 

标签:engine,None,sheet,读取,na,excel,DataFrame,pandas
From: https://www.cnblogs.com/crazy-output/p/18616099

相关文章

  • C# 获取excel某列单元值的特殊数值处理方式(根据单元数据格式编码获取小位数)
    当excel文件某列单元数值显示的值和实际的值不一致:1.某列某单元显示:38,实际值是38.43,只取显示的38的值。2.某列某单元显示:38.68,实际值是38.685,只取显示的38.68的值。注释:如果没有格式并且不是默认的常规格式,是文本格式时,读取什么值则返回什么值。以下是本人写的公共静态帮助类,可以......
  • 使用excel生成简单的日历
    思路比较简单,样式也单一,丑了点。采用宏和时间函数,计算单元格偏移量,进行单元格填充。SubGenerateYearCalendar()DimwsAsWorksheetSetws=ThisWorkbook.Sheets("Sheet1")'更改为你使用的表名DimyearAsIntegeryear=InputBox("请输入年份(如......
  • Pandas数据重命名:列名与索引为标题
    目录一、引言二、Pandasrename方法简介三、列名重命名3.1使用字典进行列名重命名3.2使用函数进行列名重命名四、索引重命名4.1使用字典进行索引重命名4.2使用函数进行索引重命名五、同时重命名列名和索引六、原地修改与返回新对象七、处理MultiIndex(多级索引)......
  • 不依赖第三方库,说下如何使用js读取pdf?
    在不依赖第三方库的情况下,使用原生JavaScript来读取PDF文件内容是一项相对复杂的任务,因为PDF是一种二进制文件格式,其解析需要处理很多底层细节。通常,我们会使用像pdf.js这样的库来简化这个过程。但如果你确实想要尝试不使用任何第三方库,以下是一个大致的步骤指南:获取PDF文件:......
  • 实现类似Excel的筛选
    以下是在DataGridView中实现类似Excel下拉筛选功能的解决方案:解决思路为DataGridView的列添加DataGridViewComboBoxColumn类型的列,用于显示下拉筛选列表。为DataGridView的ColumnHeaderMouseClick事件添加处理程序,当用户点击列头时,显示下拉筛选菜单。根据列的......
  • 技术领先的基于Excel的统计学分析和机器学习软件XLSTAT®
     技术领先的基于Excel的统计学分析和机器学习软件XLSTAT® XLSTAT®是一款强大的Excel数据统计分析和机器学习插件,使您可以在Excel中轻松分析和重新格式化数据。在学术研究和私人企业业务研究中,数据是最为重要的信息来源。无论您所在的专业领域是什么,您需要强大、......
  • easyexcel doRead bug
    publicclassCarOilingRecordImportVO{/***油卡号*/@ExcelProperty(value="卡号/客户编号")@NotNull(message="卡号/客户编号不能为空")privateStringcardCode;/***车牌号*/@ExcelProperty(value="车辆牌照")......
  • Pandas数据合并:concat与merge
    目录一、concat方法1.基本语法2.示例示例1:按行合并(垂直方向)示例2:按列合并(水平方向)示例3:使用join='inner'进行内连接示例4:处理列名冲突二、merge方法1.基本语法2.示例示例1:内连接(InnerJoin)示例2:外连接(OuterJoin)示例3:左连接(LeftJoin)示例4:右连接(RightJoin)......
  • 3.4 Pandas 数据合并和连接:掌握数据整合的核心技巧
    3.4Pandas数据合并和连接:掌握数据整合的核心技巧在实际的数据分析工作中,数据往往分散在多个数据源中。为了进行全面的分析,我们需要将这些数据合并或连接在一起。Pandas提供了强大的工具来实现数据的合并和连接操作。本文将详细介绍如何使用Pandas进行数据合并和连接,帮......
  • Python处理Excel数据的方法,这一篇文章就够了!!
    Excel是数据处理的“瑞士军刀”,在日常工作中扮演着重要角色。然而,面对复杂的Excel文件时,手动处理显然效率低下。那么,如何利用Python高效地处理Excel数据?xlrd、xlwt、openpyxl和pandas是不可或缺的利器。今天,我们就来深度剖析这些工具,教你用Python优雅地操作Excel!......