【Python】pandas中的read_excel()和to_excel()函数解析与代码实现

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。

🤓 同时欢迎大家关注其他专栏,我将分享Web前后端开发、人工智能、机器学习、深度学习从0到1系列文章。

🌼 同时洲洲已经建立了程序员技术交流群,如果您感兴趣,可以私信我加入社群,可以直接vx联系(文末有名片)v:bdizztt

🖥 随时欢迎您跟我沟通,一起交流,一起成长、进步!点此也可获得联系方式~

本文目录

前言

Pandas是Python中用于数据分析和操作的强大库,它提供了许多方便的函数来处理各种格式的数据。

Excel文件作为一种常见的数据存储格式,在数据处理中经常用到。

Pandas提供了read_excel()函数来读取Excel文件,以及to_excel()函数将数据写入Excel。

本文将详细解析这两个函数的用法,并通过代码示例展示它们在不同场景下的应用。

一、read_excel()函数简介

Pandas是一个开源的数据分析和操作库,它提供了快速、灵活和表达力强的数据结构,旨在使数据清洗和分析工作变得更加简单易行。Pandas是基于NumPy构建的,因此可以与NumPy无缝集成。

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

1.1 基础语法

python 复制代码
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, verbose=True, parse_dates=False, 
date_parser=None, thousands=None, comment=None, 
skipfooter=0, convert_float=True, mangle_dupe_cols=True, **kwds)

常用的参数说明:

python 复制代码
io : string, path object ; excel 路径。
sheetname : string, int, mixed list of strings/ints, or None, default 0 返回多表使用sheetname=[0,1],若sheetname=None是返回全表 注意:int/string 返回的是dataframe,而none和list返回的是dict of dataframe
header : int, list of ints, default 0 指定列名行,默认0,即取第一行,数据为列名行以下的数据 若数据不含列名,则设定 header = None
skiprows : list-like,Rows to skip at the beginning,省略指定行数的数据
skip_footer : int,default 0, 省略从尾部数的int行数据
index_col : int, list of ints, default None指定列为索引列,也可以使用u"strings"
names : array-like, default None, 指定列的名字。

示例代码

python 复制代码
import pandas as pd

# 读取Excel文件
df = pd.read_excel('path_to_your_excel_file.xlsx')

# 只读取特定的列
df = pd.read_excel('path_to_your_excel_file.xlsx', usecols=['Column1', 'Column2'])

二、to_excel()函数简介

to_excel()函数用于将DataFrame对象写入Excel文件。你可以控制输出的格式、工作表名称等。

基础语法

python 复制代码
DataFrame.to_excel(io, 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, encoding=None, 
inf_rep='inf', verbose=True, freeze_panes=None, 
storage_options=None)

常用的参数说明:

python 复制代码
io: Excel文件的路径或文件对象。
sheet_name: 写入的工作表名称。
na_rep: 缺失值的表示方式,默认为空字符串。
columns: 指定要写入的列。
header: 是否写入列名。
index: 是否写入索引。

示例代码

python 复制代码
# 将DataFrame写入Excel文件
df.to_excel('output_excel_file.xlsx', sheet_name='Sheet1')

# 只写入特定的列
df.to_excel('output_excel_file.xlsx', columns=['Column1', 'Column2'])

三、代码案例

读取并处理Excel数据

python 复制代码
# 读取Excel文件
df = pd.read_excel('data.xlsx')

# 数据清洗:去除重复记录
df = df.drop_duplicates()

# 将处理后的数据写回Excel
df.to_excel('cleaned_data.xlsx')

场景2:合并多个Excel工作表

python 复制代码
# 读取Excel文件中的所有工作表
xls = pd.ExcelFile('multi_sheets.xlsx')

# 遍历工作表并读取数据
dfs = {sheet: xls.parse(sheet) for sheet in xls.sheet_names}

# 合并所有工作表的数据
combined_df = pd.concat(dfs.values(), ignore_index=True)

# 将合并后的数据写入新的Excel文件
combined_df.to_excel('combined_data.xlsx', index=False)

写入格式化的Excel文件

python 复制代码
# 写入Excel文件,指定列名和不写入索引
df.to_excel('formatted_data.xlsx', index=False, header=True, columns=['Column1', 'Column2'])

# 使用ExcelWriter来设置工作表的格式
with pd.ExcelWriter('styled_data.xlsx', engine='xlsxwriter') as writer:
    df.to_excel(writer, sheet_name='Sheet1', startrow=2, startcol=3, index=False)
    workbook  = writer.book
    worksheet = writer.sheets['Sheet1']
    worksheet.set_column('A:D', 15)  # 设置列宽

四、read_excel()数据实战

假设我们拥有数据源如下:

python 复制代码
sheet1:
ID  NUM-1   NUM-2   NUM-3
36901   142 168 661
36902   78  521 602
36903   144 600 521
36904   95  457 468
36905   69  596 695

sheet2:
ID  NUM-1   NUM-2   NUM-3
36906   190 527 691
36907   101 403 470

函数原型

python 复制代码
basestation ="F://pythonBook_PyPDAM/data/test.xls"
data = pd.read_excel(basestation)
print data

输出一个dataframe

python 复制代码
      ID  NUM-1  NUM-2  NUM-3
0  36901    142    168    661
1  36902     78    521    602
2  36903    144    600    521
3  36904     95    457    468
4  36905     69    596    695

sheetname

sheetname参数:返回多表使用sheetname=0,1,若sheetname=None是返回全表

注意:int/string 返回的是dataframe,而none和list返回的是dict of dataframe

python 复制代码
data_1 = pd.read_excel(basestation,sheetname=[0,1])
print data_1
print type(data_1)

输出:dict of dataframe

python 复制代码
OrderedDict([(0, ID  NUM-1  NUM-2  NUM-3
0  36901    142    168    661
1  36902     78    521    602
2  36903    144    600    521
3  36904     95    457    468
4  36905     69    596    695), 
(1,       ID  NUM-1  NUM-2  NUM-3
0  36906    190    527    691
1  36907    101    403    470)])

指定列名行,默认0,即取第一行,数据为列名行以下的数据 若数据不含列名,则设定 header = None ,注意这里还有列名的一行。

python 复制代码
data = pd.read_excel(basestation,header=None)
print data
输出:
       0      1      2      3
0     ID  NUM-1  NUM-2  NUM-3
1  36901    142    168    661
2  36902     78    521    602
3  36903    144    600    521
4  36904     95    457    468
5  36905     69    596    695

data = pd.read_excel(basestation,header=[3])
print data
输出:
   36903  144    600    521  
0  36904     95    457    468
1  36905     69    596    695

skiprows

省略指定行数的数据

python 复制代码
data = pd.read_excel(basestation,skiprows = [1])
print data
输出:
      ID  NUM-1  NUM-2  NUM-3
0  36902     78    521    602
1  36903    144    600    521
2  36904     95    457    468
3  36905     69    596    695

省略从尾部数的int行的数据

python 复制代码
data = pd.read_excel(basestation, skip_footer=3)
print data
输出:
      ID  NUM-1  NUM-2  NUM-3
0  36901    142    168    661
1  36902     78    521    602

index_col

指定列为索引列,也可以使用u"strings"

python 复制代码
data = pd.read_excel(basestation, index_col="NUM-3")
print data
输出:
          ID  NUM-1  NUM-2
NUM-3                     
661    36901    142    168
602    36902     78    521
521    36903    144    600
468    36904     95    457
695    36905     69    596

names

指定列的名字。

python 复制代码
data = pd.read_excel(basestation,names=["a","b","c","e"])
print data
       a    b    c    e
0  36901  142  168  661
1  36902   78  521  602
2  36903  144  600  521
3  36904   95  457  468
4  36905   69  596  695

五、to_excel()数据实战

数据源

python 复制代码
    ID  NUM-1   NUM-2   NUM-3
0   36901   142 168 661
1   36902   78  521 602
2   36903   144 600 521
3   36904   95  457 468
4   36905   69  596 695
5   36906   165 453 

加载数据:
basestation ="F://python/data/test.xls"
basestation_end ="F://python/data/test_end.xls"
data = pd.read_excel(basestation)

excel_writer

参数excel_writer,输出路径。

python 复制代码
data.to_excel(basestation_end)
输出:
    ID  NUM-1   NUM-2   NUM-3
0   36901   142 168 661
1   36902   78  521 602
2   36903   144 600 521
3   36904   95  457 468
4   36905   69  596 695
5   36906   165 453 

sheet_name

将数据存储在excel的那个sheet页面。

python 复制代码
data.to_excel(basestation_end,sheet_name="sheet2")

na_rep

缺失值填充

python 复制代码
data.to_excel(basestation_end,na_rep="NULL")
输出:
    ID  NUM-1   NUM-2   NUM-3
0   36901   142 168 661
1   36902   78  521 602
2   36903   144 600 521
3   36904   95  457 468
4   36905   69  596 695
5   36906   165 453 NULL

colums

sequence, optional,Columns to write 选择输出的的列。

python 复制代码
data.to_excel(basestation_end,columns=["ID"])
输出
    ID
0   36901
1   36902
2   36903
3   36904
4   36905
5   36906

boolean or list of string,默认为True,可以用list命名列的名字。header = False 则不输出题头。

python 复制代码
data.to_excel(basestation_end,header=["a","b","c","d"])
输出:
    a   b   c   d
0   36901   142 168 661
1   36902   78  521 602
2   36903   144 600 521
3   36904   95  457 468
4   36905   69  596 695
5   36906   165 453 

data.to_excel(basestation_end,header=False,columns=["ID"])
header = False 则不输出题头
输出:
0   36901
1   36902
2   36903
3   36904
4   36905
5   36906

index

index:boolean, default True Write row names (index)

默认为True,显示index,当index=False 则不显示行索引(名字)。

index_label : string or sequence, default None 设置索引列的列名。

python 复制代码
data.to_excel(basestation_end,index=False)
输出:
ID  NUM-1   NUM-2   NUM-3
36901   142 168 661
36902   78  521 602
36903   144 600 521
36904   95  457 468
36905   69  596 695
36906   165 453 

data.to_excel(basestation_end,index_label=["f"])
输出:
f   ID  NUM-1   NUM-2   NUM-3
0   36901   142 168 661
1   36902   78  521 602
2   36903   144 600 521
3   36904   95  457 468
4   36905   69  596 695
5   36906   165 453 

总结

📝Hello,各位看官老爷们好,我已经建立了CSDN技术交流群,如果你很感兴趣,可以私信我加入我的社群。

📝社群中不定时会有很多活动,例如每周都会包邮免费送一些技术书籍及精美礼品、学习资料分享、大厂面经分享、技术讨论谈等等。

📝社群方向很多,相关领域有Web全栈(前后端)、人工智能、机器学习、自媒体副业交流、前沿科技文章分享、论文精读等等。

📝不管你是多新手的小白,都欢迎你加入社群中讨论、聊天、分享,加速助力你成为下一个大佬!

📝想都是问题,做都是答案!行动起来吧!欢迎评论区or后台与我沟通交流,也欢迎您点击下方的链接直接加入到我的交流社群!~ 跳转链接社区~

相关推荐
长和信泰光伏储能15 分钟前
京津冀光伏发电:绿色能源的未来之路
python·能源
浦信仿真大讲堂39 分钟前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
hPw0eKIqD40 分钟前
使用二次封装的Excel COM 组件操作Excel\WPS ET中的区域、行和列
excel·wps
Gu Gu Study1 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
卷无止境2 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境2 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd1232 小时前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
Dxy12393102163 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb003 小时前
一个项目带你入门AI应用开发01
python
0566463 小时前
Python康复训练——常用标准库
开发语言·python·学习