一个dataframe只能储存一个excel子表吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个dataframe只能储存一个excel子表吗相关的知识,希望对你有一定的参考价值。

如何将多个pandas.dataframe()保存到同一个Excel工作簿的不同工作表sheet中?其实只需要灵活使用pandas中的ExcelWriter()方法即可实现。语法格式如下:

pd.ExcelWriter(path, engine=None, date_format=None, datetime_format=None, mode="w" ,sheet_name, index=Ture)
复制
参数解释:
path:文件保存路径。
engine:写入excel文件使用的引擎,默认为"None";一般情况下默认即可。
date_format:将写入Excel文件中的日期格式化,如"YYYY-MM-DD";默认为"None"。
datetime_format:将写入excel文件中的时间格式化,如"YYYY-MM-DD HH: MM: SS"。默认为"None"。
mode:写入模式,有"w"–写入和"a"–追加;默认为"w"。
sheet_name:工作表名。
index:工作表中是否显示数据框中的索引。False为不显示,True为显示。
假设有三个数据框data,data1,data2,具体操作如下:

import pandas as pd
writer=pd.ExcelWriter('文件名.xlsx')
data.to_excel(excel_writer=writer,sheet_name='工作表名',index=False)
data1.to_excel(excel_writer=writer,sheet_name='工作表名1',index=False)
data2.to_excel(excel_writer=writer,sheet_name='工作表名2',index=False)
writer.save()
复制
2.数据框的合并
这里介绍两个比较常用的数据框合并函数pd.concat()和pd.merge()。假设有两个数据框data1,data2。
2.1pd.concat()是专门用于数据连接合并的函数,它可以沿着行或列进行操作,同时可以指定非合并轴的合并方式(如合集、交集等)。语法格式如下:

pd.concat(objs, axis=0, join='outer', ignore_index=False,
keys=None, levels=None, names=None, sort=False,
verify_integrity=False, copy=True)
复制
参数解释:
objs: 需要连接的数据,可以是多个DataFrame,它是必传参数。
axis: 连接轴的方法,默认值为0,即按行连接,追加在行后面;axis=1时追加到列后面(按列连接)。
join: 合并方式,其他轴上的数据是按交集(inner)还是并集(outer)进行合并。
ignore_index: 是否保留原来的索引。
keys: 连接关系,使用传递的键作为最外层级别来构造层次结构索引,就是给每个表指定一个一级索引。
names: 索引的名称,包括多层索引。
verify_integrity: 是否检测内容重复;参数为True时,如果合并的数据与原数据包含索引相同的行,则会报错。
水平合并:

data=pd.concat([data1,data2],keys=['data1','data2'],axis=1)
复制
垂直合并:要求两个数据框的字段名称(列名)相同

data=pd.concat([data1,data2],keys=['data1','data2'],axis=0)
复制
参数keys 和 names的使用:
当表格拼接完成后,就不能判断这些数据是来自于哪一个表了,如果需要保留来源信息,就可以通过keys参数进行设置,而names参数可以给拼接后形成的数据结构添加名字。
2.2pd.merge()的作用是用数据库样式的连接合并DataFrame。语法格式如下:

pd.merge( x,y, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
复制
参数解释:
x:左数据对象。
y:右数据对象。
how:数据对象连接的方式,inner(内连接,连接两个数据对象中键值交集的行,其余忽略)、outer(外连接,连接两个数据对象中键值并集的列)、left(左连接,取出x的全部行,连接y中匹配的键值行)、right(右连接,取出y的全部行,连接x中匹配的键值行)。
left_on:左数据框对象用于连接的键。
right_on:右数据框对象用于连接的键。
on:用于连接的列名,必须包含在左右两个DataFrame中。
left_index:将左侧的行索引用作其连接键。
right_index:将右侧的行索引用作其连接键。
suffixes:字符串值元组,用于追加到重叠列名的末尾。
只保留左表的所有数据:

data=pd.merge(left=data1,right=data2,how='left',on='列名')
复制
只保留右表的所有数据:

data=pd.merge(left=data1,right=data2,how='right',on='列名')
复制
只保留两个表公共部分的信息:

data=pd.merge(left=data1,right=data2,how='inner',on='列名')
复制
只保留两个表所有的信息:

data=pd.merge(left=data1,right=data2,how='outer',on='列名')
复制
on=[‘列名1’,‘列名2’]表示多列匹配:

data=pd.merge(left=data1,right=data2,how='left',on=['列名1','列名2'])
复制
如果在表合并的过程中,两个表有一列同名,但是值不同,合并时又都想保留下来,就可以用suffixes给每个表的重复列名增加后缀:

data=pd.merge(left=data1,right=data2,how='left',on='列名',suffixes=['.1','.2'])
复制
left_on=‘列名1’,right_on='列名2’可以根据两个表不同的列名合并:
参考技术A 一个dataframe只能储存一个excel子表吗?
答案:8月28日dataframe()保存到同一个Excel工作簿的不同工作表sheet中?其实只需要灵活使用pandas。

python3 导出DataFrame到本地excel(数据条数大于65535)

参考技术A 其中,DFname 为DataFrame文件名,excel_contents为excel储存路径,如:’d:test.xlsx。

以上是关于一个dataframe只能储存一个excel子表吗的主要内容,如果未能解决你的问题,请参考以下文章

Pageable的filterby只能过滤一张表吗

python3 导出DataFrame到本地excel(数据条数大于65535)

您可以使用 Excel 的新动态函数创建交叉表吗?

Postgres 分区性能调优

可以使用 XSLT 样式表填充现有 Excel 工作表吗?

pandas如何在现有的Excel表格上新建工作表并添加dataframe