最近经常用python处理excel,基本就是读取、处理字段、再保存。这里先把基础操作抽出来,下次直接使用就好了:
# -*- coding: utf-8 -*-
import pandas as pd
import os
# 函数
def process_excel(file_name):
# 读取excel文件的所有sheet
sheets = pd.read_excel(file_name, sheet_name=None)
# 存储要写出到excel文件的处理结果, key是sheet名称, value是dataframe
results = {}
# 获取所有sheet的名称
sheet_names = list(sheets.keys())
# 遍历每个sheet
for sheet in sheet_names:
df = sheets[sheet]
if sheet == 'B': # 跳过某些sheet, 不做处理
results['B'] = df
continue
# 获取所有列名
column_names = list(df.columns)
#print(column_names)
# 获取行数
nrow = df.shape[0]
# 遍历每一行
for ridx in range(nrow):
# 获取某行某列的数据
snp = str(df.loc[ridx, 'snp'])
# 做一些处理...
# 修改某些位置的值
df.loc[ridx, 'seq'] = "blabla"
# 这个sheet处理完了
results[sheet] = df
# 创建一个新文件
xlsx_name = 'new_' + file_name
cur_file_names = os.listdir()
if xlsx_name not in cur_file_names:
empty_df = pd.DataFrame()
empty_df.to_excel(xlsx_name)
# 可选:按sheet名称排序(也可以key=sheet_names.index)
results = sorted(results.items(),key=lambda i:i[0])
# 排序完是元组的列表
with pd.ExcelWriter(xlsx_name, mode='a', engine="openpyxl") as writer:
for i in results:
i[1].to_excel(writer, sheet_name=i[0], index=False)
# main
if __name__ == '__main__':
process_excel("snp_table.xlsx")