pandas读写excel,csv

news2024/12/28 18:26:26

1.读excel

1.to_dict() 函数基本语法

DataFrame.to_dict   (self,   orient='dict'  ,   into=  ) --- 官方文档

函数种只需要填写一个参数:orient 即可 ,但对于写入orient的不同,字典的构造方式也不同,官网一共给出了6种,并且其中一种是列表类型:

  • orient ='dict',是函数默认的,转化后的字典形式:{column(列名) : {index(行名) : value(值) )}};
  • orient ='list' ,转化后的字典形式:{column(列名) :{[ values ](值)}};
  • orient ='series' ,转化后的字典形式:{column(列名) : Series (values) (值)};
  • orient ='split' ,转化后的字典形式:{'index' : [index],‘columns' :[columns],’data‘ : [values]};
  • orient ='records' ,转化后是 list形式:[{column(列名) : value(值)}......{column:value}];
  • orient ='index' ,转化后的字典形式:{index(值) : {column(列名) : value(值)}};

备注:

1,上面中 value 代表数据表中的值,column表示列名,index 表示行名,如下图所示:

2,{ }表示字典数据类型,字典中的数据是以 {key : value} 的形式显示,是键名和键值一一对应形成的。

2,关于6种构造方式进行代码实例

六种构造方式所处理 DataFrame 数据是统一的,如下:

 
  1. >>> import pandas as pd

  2. >>> df =pd.DataFrame({'col_1':[1,2],'col_2':[0.5,0.75]},index =['row1','row2'])

  3. >>> df

  4. col_1 col_2

  5. row1 1 0.50

  6. row2 2 0.75

2.1,orient ='dict' — {column(列名) : {index(行名) : value(值) )}}

to_dict('list') 时,构造好的字典形式:{第一列的列名:{第一行的行名:value值,第二行行名,value值},....};

 
  1. >>> df

  2. col_1 col_2

  3. row1 1 0.50

  4. row2 2 0.75

  5. >>> df.to_dict('dict')

  6. {'col_1': {'row1': 1, 'row2': 2}, 'col_2': {'row1': 0.5, 'row2': 0.75}}

orient = 'dict 可以很方面得到 在某一列对应的行名与各值之间的字典数据类型,例如在源数据上面我想得到在col_1这一列行名与各值之间的字典,直接在生成字典查询列名为col_1

 
  1. >>> df

  2. col_1 col_2

  3. row1 1 0.50

  4. row2 2 0.75

  5. >>> df.to_dict('dict')['col_1']

  6. {'row1': 1, 'row2': 2}

2.2,orient ='list' — {column(列名) :{[ values ](值)}};

生成字典中 key为各列名,value为各列对应值的列表

 
  1. >>> df

  2. col_1 col_2

  3. row1 1 0.50

  4. row2 2 0.75

  5. >>> df.to_dict('list')

  6. {'col_1': [1, 2], 'col_2': [0.5, 0.75]}

orient = 'list' 时,可以很方面得到 在某一列 各值所生成的列表集合,例如我想得到col_2 对应值得列表:

 
  1. >>> df

  2. col_1 col_2

  3. row1 1 0.50

  4. row2 2 0.75

  5. >>> df.to_dict('list')['col_2']

  6. [0.5, 0.75]

2.3,orient ='series' — {column(列名) : Series (values) (值)};

orient ='series' 与 orient = 'list' 唯一区别就是,这里的 value 是 Series数据类型,而前者为列表类型

 
  1. >>> df

  2. col_1 col_2

  3. row1 1 0.50

  4. row2 2 0.75

  5. >>> df.to_dict('series')

  6. {'col_1': row1 1

  7. row2 2

  8. Name: col_1, dtype: int64, 'col_2': row1 0.50

  9. row2 0.75

  10. Name: col_2, dtype: float64}

2.4,orient ='split' — {'index' : [index],‘columns' :[columns],’data‘ : [values]};

orient ='split' 得到三个键值对,列名、行名、值各一个,value统一都是列表形式;

 
  1. >>> df

  2. col_1 col_2

  3. row1 1 0.50

  4. row2 2 0.75

  5. >>> df.to_dict('split')

  6. {'index': ['row1', 'row2'], 'columns': ['col_1', 'col_2'], 'data': [[1, 0.5], [2, 0.75]]}

orient = 'split' 可以很方面得到 DataFrame数据表 中全部 列名或者行名 的列表形式,例如我想得到全部列名:

 
  1. >>> df

  2. col_1 col_2

  3. row1 1 0.50

  4. row2 2 0.75

  5. >>> df.to_dict('split')['columns']

  6. ['col_1', 'col_2']

2.5,orient ='records' — [{column:value(值)},{column:value}....{column:value}];

注意的是,orient ='records' 返回的数据类型不是 dict ; 而是list 列表形式,由全部列名与每一行的值形成一一对应的映射关系:

 
  1. >>> df

  2. col_1 col_2

  3. row1 1 0.50

  4. row2 2 0.75

  5. >>> df.to_dict('records')

  6. [{'col_1': 1, 'col_2': 0.5}, {'col_1': 2, 'col_2': 0.75}]

这个构造方式的好处就是,很容易得到 列名与某一行值形成得字典数据;例如我想要第2行{column:value}得数据:

 
  1. >>> df

  2. col_1 col_2

  3. row1 1 0.50

  4. row2 2 0.75

  5. >>> df.to_dict('records')[1]

  6. {'col_1': 2, 'col_2': 0.75}

2.6,orient ='index' — {index:{culumn:value}};

orient ='index'2.1用法刚好相反,求某一行中列名与值之间一一对应关系(查询效果与2.5相似):

 
  1. >>> df

  2. col_1 col_2

  3. row1 1 0.50

  4. row2 2 0.75

  5. >>> df.to_dict('index')

  6. {'row1': {'col_1': 1, 'col_2': 0.5}, 'row2': {'col_1': 2, 'col_2': 0.75}}

  7. #查询行名为 row2 列名与值一一对应字典数据类型

  8. >>> df.to_dict('index')['row2']

  9. {'col_1': 2, 'col_2': 0.75}

2.写excel

1.pd.DataFrame.from_records例子

数据可以作为结构化的 ndarray 提供:

>>> data = np.array([(3, 'a'), (2, 'b'), (1, 'c'), (0, 'd')],
...                 dtype=[('col_1', 'i4'), ('col_2', 'U1')])
>>> pd.DataFrame.from_records(data)
   col_1 col_2
0      3     a
1      2     b
2      1     c
3      0     d

数据可以作为字典列表提供:

>>> data = [{'col_1': 3, 'col_2': 'a'},
...         {'col_1': 2, 'col_2': 'b'},
...         {'col_1': 1, 'col_2': 'c'},
...         {'col_1': 0, 'col_2': 'd'}]
>>> pd.DataFrame.from_records(data)
   col_1 col_2
0      3     a
1      2     b
2      1     c
3      0     d

数据可以作为具有相应列的元组列表提供:

>>> data = [(3, 'a'), (2, 'b'), (1, 'c'), (0, 'd')]
>>> pd.DataFrame.from_records(data, columns=['col_1', 'col_2'])
   col_1 col_2
0      3     a
1      2     b
2      1     c
3      0     d

2.pd.DataFrame.from_dict例子

代码

# -*- coding: utf-8 -*-
import xlrd
import os
import pandas as pd

class ExcelReader:

    def __init__(self, config):
        """
        filepath: str
        sheetnames: list
        header_index : int
        """
        self.path = config['filepath']
        self.sheetnames = config.get('sheetnames',0)
        header_index = config.get('header_index',0)
        self.data = {}
        if not self.sheetnames:
            data_xls = pd.read_excel(self.path, sheet_name=0, header=header_index, )
            data_xls.fillna("", inplace=True)
            self.data[0] = data_xls.to_dict('records')
        else:
            for name in self.sheetnames:
                #每次读取一个sheetname内容
                data_xls = pd.read_excel(self.path,sheet_name=name,header=header_index,)
                data_xls.fillna("",inplace=True)
                self.data[name] = data_xls.to_dict('records')




class ExcelWriter:
    """
    支持多写一个表格多个sheet

    """

    def __init__(self,config):
        self.path = config['filepath'] # str 路径
        self.sheetnames = config.get('sheetnames')  # list  sheet name
        if not self.sheetnames:
            self.sheetnames = []

        self.writer = pd.ExcelWriter(self.path)
        self.data = {}  #key --sheet_name  value -- sheet data: dict:
        for name in self.sheetnames:
            self.data[name] = {}

    def to_excel(self, sheet_name=None, startrow=0, index=False):
        if not sheet_name:
            for name in self.sheetnames:
                df = pd.DataFrame.from_records(self.data[name])
                df.to_excel(self.writer, sheet_name=name, startrow=startrow, index=index)
        else:
            df = pd.DataFrame.from_records(self.data[name])
            df.to_excel(self.writer, sheet_name=sheet_name, startrow=startrow, index=index)

    def write_row(self, sheet_name, row_data: dict):
        """
        sheet_name: sheet_name  可以为不存在self.sheet_name中的值

        """
        if sheet_name not in self.data:
            self.sheet_name.append(sheet_name)
            self.data[sheet_name] = {}
            for col in row_data:
                self.data[sheet_name][col] = [row_data[col]]
            return

        if not self.data[sheet_name]:
            for col in row_data:
                self.data[sheet_name][col] = [row_data[col]]
        else:
            for col in self.data[sheet_name]:
                self.data[sheet_name][col].append(row_data.get(col,''))

    def save(self):
        """
        保存并关闭
        """
        self.to_excel() #数据写入excel对象内
        self.writer.save() #保存并关闭

参考:

pandas 读取excel、一次性写入多个sheet、原有文件追加sheet_pandas 写入多个sheet-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1544015.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于springboot+vue的流浪动物管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

2002-2023年各地级市环境规制强度数据(环保词频统计)

2002-2023年各地级市环境规制强度数据(环保词频统计) 1、时间:2002-2023年 2、来源:政府工作报告 3、指标: 行政区划代码、年份、城市、所属省份、文本总长度、仅中英文-文本总长度、文本总词频-全模式、文本总词频…

快速熟悉ElasticSearch的基本概念

1.全文检索 全文检索是通过文本内容进行全面搜索的技术。通过全文检索可以快速地在大量文本数据中查找包含特定关键词或者短语的文档,并且返回相关的搜索结果。 检索和查询的区别 检索没有搜索条件边界,检索的结果取决于相关性,相关性计算…

ssm004新生报到系统+jsp

新生报到系统的设计与实现 摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对新生报到信息管理混乱,出错率…

JS运行时大盘点,出新JS运行时了!

大家好,我是奇兵, 在前端技术日新月异的今天,新的 JavaScript 运行时环境不断涌现,它们为开发者提供了更多的选择和可能性。近期,诸如 LLRT 和 WinterJS 等新运行时环境的发布,进一步丰富了 JavaScript 运…

实战 | 任意密码重置+CRRF

一、XSS漏洞 在商城的搜索处,输入标准语句的传参直接就可以弹窗 二、逻辑漏洞-用户枚举 在用户注册界面,点击发送验证码,然后用BURP发包 更改手机号传参,这里手机号传参没有进行加密,直接用手机号的位置进行爆破 正确的…

cad怎么画洗菜盆平面图?

CAD绘制住宅平面布置图的时候,特别是对厨房区域的绘制时,需要使用到洗菜盆图块该怎么绘制洗菜盆平面图呢?下面我们就来看看详细的教程。 1、打开AutoCAD 2013软件,点击【图层特性管理器】,点击【新建图层】&#xff0…

maya打开bvh脚本

目录 maya打开脚本编辑器 运行打开bvh脚本 maya导出bvh脚本 maya打开脚本编辑器 打开Maya软件,点击右下角 “脚本编辑器” 运行打开bvh脚本 https://github.com/jhoolmans/mayaImporterBVH/blob/master/bvh_importer.py import os import re from typing impo…

Redis消息队列与thinkphp/queue操作

业务场景 场景一 用户完成注册后需要发送欢迎注册的问候邮件、同时后台要发送实时消息给用户对应的业务员有新的客户注册、最后将用户的注册数据通过接口推送到一个营销用的第三方平台。 遇到两个问题: 由于代码是串行方式,流程大致为:开…

关于网格数据导出指定格式的测试(以Gmsh导出nas格式为例)

本文主要讲述Gmsh如何导出nas格式的网格数据,众所周知,Gmsh可以导出多种网格数据格式,比如大家熟悉的msh、stl、inp、cgns(似乎不完善)等等,但是gmsh不支持nas格式的导出,只支持nas格式的导入&a…

基于java+springboot+vue实现的图书借阅系统(文末源码+Lw+ppt)23-328

摘 要 伴随着我国社会的发展,人民生活质量日益提高。于是对系统进行规范而严格是十分有必要的,所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套“期待相遇”图书借阅系统,帮助商…

Harmony(鸿蒙)Stage模型综述

设计思想 ​Stage模型的设计,是为了提供给开发者一个更好的开发方式,更好的适用于多设备、分布式场景。 ​Stage模型的设计思想如下图所示。 ​Stage模型的设计基于如下三个出发点: 应用进程的有序管理 随着设备的内存越来越大&#xff0…

【docker】查看并拷贝容器内文件

一、查询容器 查询所有容器 docker ps查询名为os11的容器 docker ps | grep os11查询名为os11的容器(包含不运行的) docker ps -a| grep os11 docker ps [option] 显示结果介绍如下: 参考:[https://blog.51cto.com/u_15009374/31…

详解华为软件研发管理IPD

IPD,即集成产品开发(Integrated Product Development),是一种综合多种管理模型和理论、企业最佳实践的管理体系。旨在帮助企业快速适应市场变化,缩短产品上市时间,减少资源浪费,并提高生产力,以实现商业成功。 IPD的核心是跨部门团队的合作,涉及市场、研发、制造、服…

java项目将静态资源中的文件转为浏览器可访问的http地址

新增一个类叫啥无所谓,主要是实现 WebMvcConfigurer 加上注解 Configuration项目启动时加入bean中 只操作addResourceHandlers这一个方法 其他都没用 文章下方附带一个简易的上传图片代码 package cn.exam.config;import org.springframework.context.annotati…

Java代码基础算法练习-字符串反转-2024.03.25

任务描述: 输入一个字符串,然后将此字符串反转(字符串最长不超过25个字符) 任务要求: 代码示例: package M0317_0331;import java.util.Scanner;public class m240325_1 {public static void main(String…

Mysql锁及适用场景

一、mysql中的锁有哪些? 1.1 锁的类型 (1)共享锁(Shared Lock): 共享锁允许事务读取数据,但不允许其他事务修改数据。多个事务可以同时持有共享锁。 -- 事务A获取共享锁 START TRANSACTION; …

Matlab|基于模型预测控制(MPC)的微电网调度优化的研究

目录 1 主要内容 2 程序难点及问题说明 3 部分程序 4 下载链接 1 主要内容 该程序分为两部分,日前优化部分——该程序首先根据《电力系统云储能研究框架与基础模型》上面方法,根据每个居民的实际需要得到响应储能充放电功率,优化得到整…

网络通信VLAN学习篇

拓扑图 如上图,pc3,pc5同一网络,pc4,pc6同一网络,vlan的划分就是虚拟局域网,局域网的理解就是同一vlan下的设备可以相互通信,不同vlan不可以通信(通过三层交换机可以实现通信的&…

一分钟学习Markdown语法

title: 一分钟学习Markdown语法 date: 2024/3/24 19:33:29 updated: 2024/3/24 19:33:29 tags: MD语法文本样式列表结构链接插入图片展示练习实践链接问题 欢迎来到Markdown语法的世界!Markdown是一种简单而直观的标记语言,让文本排版变得轻松有趣。接下…