pandas读写excel,csv

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博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

为什么3D开发要用三维模型格式转换工具HOOPS Exchange?

在当今数字化时代,3D技术在各个行业中扮演着愈发重要的角色,从产品设计到制造、建筑、医疗保健等领域。然而,由于不同的软件和系统使用不同的3D模型格式,跨平台、跨系统之间的数据交换和共享变得十分复杂。为了解决这一难题&#…

利用Python进行数据清洗与预处理:Pandas的高级用法【第147篇—Pandas的高级用法】

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 利用Python进行数据清洗与预处理:Pandas的高级用法 在数据科学和机器学习领域&…

浅浅迈入C++门槛

从今天起,我要开始hello,world。 往后更要做到,拳打数据结构,脚踢Linux。 这就是江湖人的风范。 拼搏百天,我要学希普拉斯普拉斯。 C是在C的基础之上,容纳进去了面向对象编程思想,并增加了许…

基于单片机的四旋翼飞行器的设计与实现

摘 要:四旋翼飞行器可以垂直升降,应用于军事和民用领域,在飞行器的设计中,结合单片机进行设计,可以提升整体性能。基于此,本文探究基于单片机的四旋翼飞行器设计与实现,探索飞行器的硬件设计和软件设计方案,并且对系统的角速度算法以及姿态控制算法进行测试,最后对系…

【题目】【网络系统管理】2019年全国职业技能大赛高职组计算机网络应用赛项H卷

极安云科专注职业教育技能竞赛培训4年,包含信息安全管理与评估、网络系统管理、网络搭建等多个赛项及各大CTF模块培训学习服务。本团队基于赛项知识点,提供完整全面的系统性理论教学与技能培训,成立至今持续优化教学资源与讲师结构&#xff0…

【QT+QGIS跨平台编译】之八十五:【QGIS_Gui跨平台编译】—【错误处理:Qt5UiTools - Qt5UiTools】

文章目录 一、错误信息二、错误处理 一、错误信息 二、错误处理 定位到Qt5iTools目录。(例如:/Users/lucky/Qt/5.15.2/clang_64/lib) 拷贝libQt5UiTools.a,粘贴为:libQt5UiTools_debug.a

基于Matlab的视频人体动作识别,Matlab实现

博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码代做/项目合作可以联系(QQ:3249726188) 个人主页:Matlab_ImagePro-CSDN博客 原则:代码均由本人编写完成,非中介,提供…

【HM】STM32F407 HAL库 PWM

PWM简介 脉冲宽度调制(PWM) 是一种数字信号,最常用于控制电路。该信号在预定义的时间和速度中设置为高(5v或3.3v)和低(0v)。通常,我们将PWM的高电平称为1,低电平为0。 …

解锁人工智能新境界:大模型工程与架构的深度探索

在当今世界,人工智能(AI)无处不在,它已经悄然改变了我们的生活方式。从自动驾驶汽车到智能音箱,从智能医疗系统到虚拟助手,AI的影子无处不在。而在这一切背后,是一个个巨大的数学模型在默默运转。这些模型就像是我们人…

excel所有知识点

1要加双引号 工作表(.xlsx) 单击右键→插入,删除,移动、重命名、复制、设置标签颜色,选定全部工作表 工作表的移动:两个表打开→右键→移动(如果右键是灰色的,可能是保护工作表了&#xff09…

JAVA安全(偏基础)

SQL注入 SQLI(SQL Injection), SQL注入是因为程序未能正确对用户的输入进行检查,将用户的输入以拼接的方式带入SQL语句,导致了SQL注入的产生。攻击者可通过SQL注入直接获取数据库信息,造成信息泄漏。 JDBC JDBC有两个方法获取s…

鸿蒙Harmony应用开发—ArkTS-全局UI方法(列表选择弹窗)

列表弹窗。 说明: 从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 本模块功能依赖UI的执行上下文,不可在UI上下文不明确的地方使用,参见UIContext说明。 从API version 10开始&#xff0…

hadoop学习笔记

hadoop概述 Apache Hadoop 为可靠的,可扩展的分布式计算开发开源软件。作为一个数据框架允许使用简单的编程模型跨计算机群集分布式处理大型数据集(海量的数据)。分别由一下三个模块组成: 1、Hadoop分布式文件系统(HDF…

flink join的分类

带窗口的join 下图是固定窗口,同样的还有滑动窗口和会话窗口join DataStream<Integer> orangeStream = ...; DataStream<Integer> greenStream = .

报表生成器FastReport .Net用户指南:关于脚本(下)

FastReport的报表生成器&#xff08;无论VCL平台还是.NET平台&#xff09;&#xff0c;跨平台的多语言脚本引擎FastScript&#xff0c;桌面OLAP FastCube&#xff0c;如今都被世界各地的开发者所认可&#xff0c;这些名字被等价于“速度”、“可靠”和“品质”,在美国&#xff…

走进redisson

这里作者将大家走进redisson&#xff0c;读完这篇相信加深你对redisson的获取锁&#xff0c;重入&#xff0c;超时&#xff0c;看门狗&#xff0c;发布订阅等原理和功能的理解。 本文将深入原理代码&#xff0c;给出每行代码的意义以及最后的效果&#xff0c;过程有些枯燥&…

GitHub Copilot怎么取消付费?

0. 前言 GitHub Copilot非常好用&#xff0c;还没有使用过的同学可以参考教程白嫖一个月&#xff1a;【保姆级】VsCode 安装GitHub Copilot实操教程 GitHub Copilot每月10美元的费用对于一些用户来说可能是一笔不小的开销。如果你已经完成了GitHub Copilot的免费试用&#xf…

在conda下的sklearn库安装

比较坑的是它这个库在conda下不叫这个名字&#xff0c;所以直接conda install sklearn是不行的&#xff0c;输入下面的指令就能直接安装啦。 conda install scikit-learn

【数据结构】猛猛干7道链表OJ

前言知识点 链表的调试技巧 int main() {struct ListNode* n1(struct ListNode*)malloc(sizeof(struct ListNode));assert(n1);struct ListNode* n2(struct ListNode*)malloc(sizeof(struct ListNode));assert(n2);struct ListNode* n3(struct ListNode*)malloc(sizeof(struc…

docker方式进行pytorch多机多卡分布式训练

docker ip共享与gpu指定 1)ip共享 docker网络有多种,这里选择host直接用宿主机的ip 2)指定gpu docker方式进行pytorch多机多卡分布式训练 nvidia docker 容器介绍链接:https://docs.nvidia.com/deeplearning/frameworks/pytorch-release-notes/ docker用的nvidia官方镜像…