Python-pandas-操作Excel文件(读取数据/写入数据)及Excel表格列名操作详细分享

Python-pandas-操作Excel文件(读取数据/写入数据)

提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是pandas的使用语法。前后每一小节的内容是存在的有:学习and理解的关联性。【帮帮志系列文章】:每个知识点,都是写出代码和运行结果且前后关联上的去分析和说明(能大量节约您的时间)。

所有文章都不会直接把代码放那里,让您自己去看去理解。我希望我的内容对您有用而努力~

python语法-pandas第三节-附 :本小节是 DataFrame全系列分享(使用.特点.说明.外部文件数据.取值.功能函数.统计函数)的 Excel表格文件操作:读取数据及写入数据

详细的 DataFrame:

DataFrame全系列分享(数据结构.使用.特点.说明.外部文件数据.取值.功能函数.统计函数)

链接: DataFrame全系列分享【上榜文章】
【上榜文章】一文搞定,非常详细的Python-Pandas - DataFrame全系列分享。大量案例且晦涩难懂的有大白话解释。详细的扩展内容也额外写了其他更加细节全面的文章链接在里面,来保证DataFrame的全部内容,本文就是其中一个扩展读写数据Excel篇


文章目录

  • Python-pandas-操作Excel文件(读取数据/写入数据)
  • 前言
  • [一、读取数据 read_excel()](#一、读取数据 read_excel())
  • [二、写入数据 to_excel()](#二、写入数据 to_excel())
    • [多个表单 ExcelWriter()](#多个表单 ExcelWriter())
  • [三、加载 Excel 文件 ExcelFile()](#三、加载 Excel 文件 ExcelFile())
  • [四、多个 DataFrame 到同一Excel .ExcelWriter()](#四、多个 DataFrame 到同一Excel .ExcelWriter())
  • 总结

前言

pandas 提供了丰富的 Excel 表格文件的操作功能,帮助我们方便地读取和写入 .xls 和 .xlsx 文件

它也支持多表单、索引、列选择等复杂操作,是数据分析中必备的工具。

快速预览:

pd.read_excel() 读取 Excel 文件,返回 DataFrame
DataFrame.to_excel() 将 DataFrame 写入 Excel 文件
pd.ExcelFile() 加载 Excel 文件并访问多个表单
pd.ExcelWriter() 写入多个 DataFrame 到同一 Excel 文件的不同表单


一、读取数据 read_excel()

方法参数:

pandas.read_excel(path, 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)

path:这是必需的参数,指定了要读取的 Excel 文件的路径或文件对象。

sheet_name=0:指定要读取的工作表名称或索引。默认为0,即第一个工作表。

header=0:指定用作列名的行。默认为0,即第一行。

names=None:用于指定列名的列表。如果提供,将覆盖文件中的列名。

index_col=None:指定用作行索引的列。可以是列的名称或数字。

usecols=None:指定要读取的列。可以是列名的列表或列索引的列表。

dtype=None:指定列的数据类型。可以是字典格式,键为列名,值为数据类型。

engine=None:指定解析引擎。默认为None,pandas 会自动选择。

converters=None:用于转换数据的函数字典。

true_values=None:指定应该被视为布尔值True的值。

false_values=None:指定应该被视为布尔值False的值。

skiprows=None:指定要跳过的行数或要跳过的行的列表。

nrows=None:指定要读取的行数。

na_values=None:指定应该被视为缺失值的值。

keep_default_na=True:指定是否要将默认的缺失值(例如NaN)解析为NA。

na_filter=True:指定是否要将数据转换为NA。

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:传递给引擎的额外参数字典。
其实平时操作Excel并不需要写全这么多参数,后续遇到对应的问题,来查阅参数即可

准备数据,我是在桌面创建的表格,写了一些数据后又放到开发工具里面

python 复制代码
import pandas as pd

#代码在Excel文件的同层级位置(直接写名字即可),也可以指定D盘E盘的某个excel。这里没有演示
df = pd.read_excel('bbz__pandas.xlsx')
print(df)

#读取Excel并生成DataFrame:

报错:ImportError: Missing optional dependency 'openpyxl'. Use pip or conda to install openpyxl.

安装一个 openpyxl的包就好了

pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple
pip命令安装 并指定国内镜像源地址,会安装快一点

python 复制代码
# 读取指定表单的内容(表单名称)
#就是这个Excel文件,左下角有很多很多个表单,sheet_name指定读取哪一个
df = pd.read_excel('data.xlsx', sheet_name='表单名字')
print(df)

# 读取多个表单,返回一个字典
#因为多个表单里面的列名可能不一致,所以方法返回的是字典。
#然后通过字典生成DataFrame的语法就可以合并列,或者指定不同的列(本文最开始链接有 字典==>DataFrame)
dfs = pd.read_excel('data.xlsx', sheet_name=['Sheet1', 'Sheet2'])
print(dfs)

# 自定义列名并跳过前两行
#这里自定义的列名是DataFrame的列索引名字,当前指定的是ABC
#如果Excel前n行是合并标题,就跳过。当前随机写的两行
df = pd.read_excel('data.xlsx', header=None, names=['A', 'B', 'C'], skiprows=2)
print(df)

二、写入数据 to_excel()

to_excel() 方法用于将 DataFrame 写入 Excel 文件,支持 .xls 和 .xlsx 格式。

方法参数:

DataFrame.to_excel(excel_writer, *, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, inf_rep='inf', freeze_panes=None, storage_options=None, engine_kwargs=None)

excel_writer:这是必需的参数,指定了要写入的 Excel 文件路径或文件对象。

sheet_name='Sheet1':指定写入的工作表名称,默认为 'Sheet1'。

na_rep='':指定在 Excel 文件中表示缺失值(NaN)的字符串,默认为空字符串。

float_format=None:指定浮点数的格式。如果为 None,则使用 Excel 的默认格式。

columns=None:指定要写入的列。如果为 None,则写入所有列。

header=True:指定是否写入列名作为第一行。如果为 False,则不写入列名。

index=True:指定是否写入索引作为第一列。如果为 False,则不写入索引。

index_label=None:指定索引列的标签。如果为 None,则不写入索引标签。

startrow=0:指定开始写入的行号,默认从第0行开始。

startcol=0:指定开始写入的列号,默认从第0列开始。

engine=None:指定写入 Excel 文件时使用的引擎,默认为 None,pandas 会自动选择。

merge_cells=True:指定是否合并单元格。如果为 True,则合并具有相同值的单元格。

inf_rep='inf':指定在 Excel 文件中表示无穷大值的字符串,默认为 'inf'。

freeze_panes=None:指定冻结窗格的位置。如果为 None,则不冻结窗格。

storage_options=None:用于云存储的参数字典。

engine_kwargs=None:传递给引擎的额外参数字典。

python 复制代码
import pandas as pd

# 创建一个简单的 DataFrame
df = pd.DataFrame({
'name': ['bangbangzhi', 'hello', 'python', 'what'],
 'age': [25, 30, 35, 40],
 'city': ['chengdu', 'beijing', 'shanghai', 'tianjin']
})

# 将 DataFrame 写入 Excel 文件,写入 'sheet1' 表单  
df.to_excel('output.xlsx', sheet_name='sheet1', index=False)

运行代码,不在控制台看。在左边代码文件同层级位置查看。它会生成一个新的文件:output.xlsx

多个表单 ExcelWriter()

python 复制代码
# 写入多个表单,使用 ExcelWriter
with pd.ExcelWriter('output.xlsx') as writer:
df.to_excel(writer, sheet_name='sheet1', index=False)
df.to_excel(writer, sheet_name='sheet2', index=False)
#这个output.xlsx的文件会有两个表单,分别是sheet1和sheet2


#就是Excel 文件左下角那里,平时点击+多一个表

三、加载 Excel 文件 ExcelFile()

pd.ExcelFile('data.xlsx') 就是可以 先看看这个Excel 文件

方法参数:

sheet_names 返回文件中所有表单的名称列表

parse(sheet_name) 解析指定表单并返回一个 DataFrame

close() 关闭文件,以释放资源

python 复制代码
import pandas as pd


# 使用 ExcelFile 加载 Excel 文件
excel_file = pd.ExcelFile('data.xlsx')

# 查看所有表单的名称
print(excel_file.sheet_names)

# 读取指定的表单
df = excel_file.parse('Sheet1')
print(df)

# 关闭文件
excel_file.close()

四、多个 DataFrame 到同一Excel .ExcelWriter()

刚刚其实已经用过,它用于将 DataFrame 或 Series 对象写入 Excel 文件。使用 ExcelWriter,可以在一个 Excel 文件中写入多个工作表,并且可以更灵活地控制写入过程。

pandas.ExcelWriter(path, engine=None, date_format=None, datetime_format=None, mode='w', storage_options=None, if_sheet_exists=None, engine_kwargs=None)

方法参数:

path:这是必需的参数,指定了要写入的 Excel 文件的路径、URL 或文件对象。可以是本地文件路径、远程存储路径(如 S3)、URL 链接或已打开的文件对象。

engine:这是一个可选参数,用于指定写入 Excel 文件的引擎。如果为 None,则 pandas 会自动选择一个可用的引擎(默认优先选择 openpyxl,如果不可用则选择其他可用引擎)。常见的引擎包括 'openpyxl'(用于 .xlsx 文件)、'xlsxwriter'(提供高级格式化和图表功能)、'odf'(用于 OpenDocument 格式如 .ods)等。

date_format:这是一个可选参数,指定写入 Excel 文件中日期的格式字符串,例如 "YYYY-MM-DD"。

datetime_format:这是一个可选参数,指定写入 Excel 文件中日期时间对象的格式字符串,例如 "YYYY-MM-DD HH:MM:SS"。

mode:这是一个可选参数,默认为 'w',表示写入模式。如果设置为 'a',则表示追加模式,向现有文件中添加数据(仅支持部分引擎,如 openpyxl)。

storage_options:这是一个可选参数,用于指定与存储后端连接的额外选项,例如认证信息、访问权限等,适用于写入远程存储(如 S3、GCS)。

if_sheet_exists:这是一个可选参数,默认为 'error',指定如果工作表已经存在时的行为。选项包括 'error'(抛出错误)、'new'(创建一个新工作表)、'replace'(替换现有工作表的内容)、'overlay'(在现有工作表上覆盖写入)。

engine_kwargs:这是一个可选参数,用于传递给引擎的其他关键字参数。这些参数会传递给相应引擎的函数,例如 xlsxwriter.Workbook(file, **engine_kwargs) 或 openpyxl.Workbook(**engine_kwargs) 等。

python 复制代码
#01示例
#声明一个/创建一个  写入器writer  指定文件为output.xlsx 
with ExcelWriter('output.xlsx') as writer:
    df.to_excel(writer, sheet_name='sheet1')
#将df里面的内容,写到output.xlsx里面 指定表单为sheet1
python 复制代码
#02示例
#任意写两个df(DataFrame)。两行数据,两个列,df1是这样的:
'''
          name  age
0  bangbangzhi   18
1        hello   20
'''  #正常df1会有很多很多数据,然后需要存储到Excel里面
df1 = pd.DataFrame([["bangbangzhi", 18],["hello", 20]], columns=["name", "age"])
df2 = pd.DataFrame([["java", 40],["python", 21]], columns=["name", "age"])
with pd.ExcelWriter("out02.xlsx") as writer:       #一个名为out02.xlsx的Excel文件
    df1.to_excel(writer, sheet_name="sheet1")     #df1存sheet1这个表单
    df2.to_excel(writer, sheet_name="sheet2")	  #df2存sheet2这个表单
python 复制代码
#03示例
import pandas as pd
from datetime import date, datetime  

#两行数据  两列数据
'''
                           X                   Y
Date     2014-01-31 00:00:00 1999-09-24 00:00:00
Datetime 1998-05-26 23:33:04 2014-02-28 13:05:13
'''
df = pd.DataFrame(
    [
        [date(2014, 1, 31), date(1999, 9, 24)],
        [datetime(1998, 5, 26, 23, 33, 4), datetime(2014, 2, 28, 13, 5, 13)],
    ],
    index=["Date", "Datetime"],
    columns=["X", "Y"],
)  
with pd.ExcelWriter(
    "out03.xlsx",
    date_format="YYYY-MM-DD",   #统一时间格式  年-月-日
    datetime_format="YYYY-MM-DD HH:MM:SS"  #统一时间格式  年-月-日  时:分:秒
) as writer:
    df.to_excel(writer)

#统一时间格式  年-月-日  意义是  年是第一个 并且中间是横杠隔开 然后月是第二个 .......
#(只要数据过来,哪怕5-2-2025)  程序也只认5是年份  2025是日期(因为我们指定了格式)  

本文演示Excel的案例,用了很多DataFrame语法。及读取了Excel文件,取值到我们代码里,然后怎么弄呢?

可以:

详细的 DataFrame操作:

DataFrame全系列分享(数据结构.使用.特点.说明.外部文件数据.取值.功能函数.统计函数)

链接: DataFrame全系列分享【上榜文章】
【上榜文章】一文搞定,非常详细的Python-Pandas - DataFrame全系列分享。大量案例且晦涩难懂的有大白话解释。详细的扩展内容也额外写了其他更加细节全面的文章链接在里面,来保证DataFrame的全部内容,本文就是其中一个扩展读写数据Excel篇


总结

(会陆续更新非常多的IT技术知识及泛IT的电商知识,可以点个关注,共同交流。ღ( ´・ᴗ・` )比心)

(也欢迎评论,提问。 我会依次回答~)

相关推荐
测试老哥11 分钟前
软件测试之单元测试
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
presenttttt1 小时前
用Python和OpenCV从零搭建一个完整的双目视觉系统(六 最终篇)
开发语言·python·opencv·计算机视觉
Channing Lewis1 小时前
excel如何只保留前几行
excel
测试19982 小时前
软件测试之压力测试总结
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·压力测试
李昊哲小课2 小时前
销售数据可视化分析项目
python·信息可视化·数据分析·matplotlib·数据可视化·seaborn
烛阴3 小时前
带参数的Python装饰器原来这么简单,5分钟彻底掌握!
前端·python
全干engineer3 小时前
Flask 入门教程:用 Python 快速搭建你的第一个 Web 应用
后端·python·flask·web
nightunderblackcat3 小时前
新手向:Python网络编程,搭建简易HTTP服务器
网络·python·http
李昊哲小课3 小时前
pandas销售数据分析
人工智能·python·数据挖掘·数据分析·pandas
C嘎嘎嵌入式开发4 小时前
python之set详谈
开发语言·python