Pandas操作表格数据

读取表格数据

pandas常用的读取文本数据的函数

函数描述
read_csv从文件,url或者文件类型对象读取分隔好的数据, 逗号是默认分隔符
read_excel从excel的xls或者xlsx文件中读取表格数据
read_table从文件,url或者文件类型对象读取分隔好的数据, 制表符(’\t’)
read_html从html文件中读取所有表数据
read_json从json字符串中读取数据
read_sql将sql查询的结果, 读取为pandas的DataFrame

读取表格数据利用read_excel/read_csv

# -*- coding: utf-8 -*-
"""
@author: xuan
@time: 2021/07/12 11:49
@FileName: pandas读取表格数据.PY
"""

import pandas as pd


class ReadExcelData(object):
    def __init__(self, path, sheet_name=""):
        self.path = path
        self.sheet_name = sheet_name

    def read_excel(self):
        """
        :param path:  表格路径
        :param sheet_name:   表格中的sheet名字
        :return:
        """
        excel_suffix = self.path.split('.')[1]
        if excel_suffix == 'csv':
            if self.sheet_name:
                df = pd.read_csv(self.path, sheet_name=self.sheet_name, encoding='gbk')
            else:
                df = pd.read_csv(self.path, encoding='gbk')

        elif excel_suffix == 'xlsx':
            if self.sheet_name:

                df = pd.read_excel(self.path, sheet_name=self.sheet_name, encoding='gbk')
            else:
                df = pd.read_excel(self.path, encoding='gbk')
        return df
    
    # 根据列名列表获取数据
    def read_df_content(self, column_list):
        """
        :param column_list: 需要获取的列名
        :return:
        """
        df = self.read_excel()
        _dict = {}
        # 获取列名名字
        columns = list(df.columns)
        _dict = {}
        if column_list:
            _dict = {column: df[column].values.tolist() for column in column_list if column in columns}
        else:
            _dict = {column: df[column].values.tolist() for column in columns}
        return _dict

    # 表格数据读取转换成字典
    def deal_dict(self):
        df = self.read_excel()
        dict_list = df.reset_index().T.to_dict()
        _list = [dict_list[index] for index in dict_list]
        return _list

一个表格的两个sheet数据合并, 去重, 写入一个新的sheet

    from openpyxl import load_workbook
    import pandas as pd
    
    def write_excel(df1, df2, columns, key, name):
	     """
	     :param df1: 一个sheet表数据
	     :param df2: 另一个sheet表数据
	     :param columns: 需要合并的数据, 写入列名的顺序
	     :param key: 根据那个列名进行合并
	     :param name: 合并到一个sheet的名字
	     :return:
	     """
	    df = pd.merge(df1, df2, on=[key], how='outer')
	    # 去重
	    df2 = df.drop_duplicates().reset_index(drop=True)
	    # 避免写入sheet时候出现删除其他原先的sheet
	    excel_writer = pd.ExcelWriter(path, engine='openpyxl')
	    book = load_workbook(excel_writer.path)
	    excel_writer.book = book
	    df2.to_excel(excel_writer=excel_writer, sheet_name=name, encoding='gbk', index=False, columns=columns)
	    excel_writer.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值