pandas处理Excel
读取数据
xlsx or xls
import pandas as pd
xlsx_data = pd.read_excel("文件路径.xlsx")
xlsx_data.fillna('')
xlsx_data.drop_duplicates()
xlsx_data.to_dict(orient='records')
csv
csv_data = pd.read_csv("文件路径.csv")
csv_data .fillna('')
csv_data .drop_duplicates()
csv_data .to_dict(orient='records')
保存数据
xlsx or xls
pd.DataFrame.from_records(数据).to_excel('文件路径.xlsx')
csv
pd.DataFrame.from_records(数据).to_csv('文件路径.csv')
封装
class ExcelHandle:
def __init__(self):
self.now_datetime = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
def read_excel_data(self, excel_path, enter_type='xlsx', sheet_name=0, encodeing='utf8', header=0, orient='records', deduplication=False):
"""
读取excel数据
:param excel_path: 文件路径 【xxx/xxx.csv or xxx/xxx.xlsx】
:param enter_type: 输入类型 【csv or xlsx or xls】 默认 xlsx
:param sheet_name: 工作簿名称 【0 or Sheet1 0 — first,Sheet1 — 工作名称】 , csv 无sheet_name
:param encodeing: 编码 【csv — need, xlsx or xls — not need】 默认 utf8
:param header: 标头 【0 — first row start】 默认 0
:param orient: 读取数据类型 【records — [{},{}...], list — {'num1':[],'num2':[]...}】 默认 records
:param deduplication: 去重 【False - 不去重 or True — 去重】 默认 False
:return:
"""
if enter_type == 'csv':
return pd.read_csv(excel_path, encoding=encodeing, header=header).fillna('').to_dict(orient=orient) if deduplication == False else pd.read_csv(excel_path, encoding=encodeing, header=header).fillna('').drop_duplicates().to_dict(orient=orient)
else:
return pd.read_excel(excel_path, header=header, sheet_name=sheet_name).fillna('').to_dict(orient=orient) if deduplication == False else pd.read_excel(excel_path, header=header,sheet_name=sheet_name).fillna('').drop_duplicates().to_dict(orient=orient)
def save_excel_data(self, excel_path, item_data, enter_type='xlsx', sheet_name='sheet', encoding='utf8',startrow=0):
"""
保存excel数据
:param excel_path: 保存路径 【xxx/xxx.csv or xxx/xxx.xlsx】
:param item_data: 数据 【[{},{}...]】
:param enter_type: 输入类型 【csv or xlsx or xls】
:param sheet_name: 工作簿名称 【xlsx — sheet or xls — sheet】 默认 sheet【只有xlsx和xls可以】
:param encoding: 编码 【暂无使用】
:param startrow: 开始行 【xlsx or xls —— 从第几行开始写入,csv除外】
:return:
"""
try:
pd.DataFrame.from_records(item_data).to_csv(excel_path, index=False) if enter_type == 'csv' else pd.DataFrame.from_records(item_data).to_excel(excel_path, index=False, startrow=startrow, sheet_name=sheet_name)
return {'code': 200, 'data': 'success', 'msg': '保存成功'}
except Exception as e:
return {'code': 201, 'data': f'fail:{e}', 'msg': '保存失败'}