pandas读取具有多个sheet的xlsx文件
import pandas as pd
df1 = pd.read_excel(data_path, sheet_name=None)
df2 = pd.read_excel(data_path)
print(df1.keys())
print(df2.keys())
两个print不一样,如果不设定sheet_name为None,默认指读取一个sheet,即df2的keys为表格的列名,df1的keys返回的为所有sheet的name,df1读取了所有sheet,为字典类型
pandas保存多个sheet在一个xlsx中
在上述代码的基础上
df1_new = df1['sheet-1'].iloc[0:2]
df1_new.to_excel(data_path, sheet_name='sheet-1-new', index=False) # sheet-1-new 是新的sheet名字,无重复
这种保存方式会改变原始的xlsx,打开文件后只有一个标签名为sheet-1-new的表格,其他的都没有了。即使使用for循环,只会覆盖,最终还是只有一个sheet。
import pandas as pd
df1 = pd.read_excel(data_path, sheet_name=None)
df1_new = df1['sheet-1'].iloc[0:2]
key_list = df1.keys()
writer = pd.ExcelWriter(data_path)
for key in key_list:
df1[key].to_excel(writer, sheet_name=key, index=False)
df1_new.to_excel(writer, sheet_name='sheet-1-new', index=False)
writer.close()
使用ExcelWriter+for循环在一个xlsx中保存多个sheet
pandas在已存在的xlsx中添加一个新的sheet
使用with…as的形式打开,推出后自动close文件。ExcelWriter使用’a’的mode进行追加sheet,注意要设置engine。
with pd.ExcelWriter(data_path, mode='a', engine='openpyxl') as writer:
new_dataf.to_excel(writer, sheet_name='new-sheet', index=False)
在已经存在xlsx中重写sheet
这个需要联动openpyxl第三方库。在尝试用遇到了好多报错,哭死。下面这个方法是可以通过的。
data = {'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35]}
data = pd.DataFrame(data)
with pd.ExcelWriter(data_path, engine='openpyxl', mode='a', if_sheet_exists='replace') as writer:
# writer.book = load_workbook('/home/wqgao/temp/dataf/total_ori.xlsx')
data.to_excel(writer, sheet_name='exist_sheet', index=False)
之前看了大部分博客没有说要设置if_sheet_exists参数,在某一篇(https://blog.csdn.net/weixin_51591389/article/details/129795842)中提到了,不过参数设置的是’overlay’,我的出现报错,可能是版本问题。更改为replace即可,该参数如果设置为’new’,则会重新创建一个sheet,命名为sheet_name+‘1’。