↑↑↑↑↑点击上方蓝色字关注我们!



『运筹OR帷幄』原创

作者:杨士锦 周岩 书生

编者按

当我们开始着手做一个数据分析项目时,选择和导入数据集是第一个步骤,而导出数据虽然非必需,但有时候我们也需要保存处理或者分析后的结果,方便下次使用。在pandas中,它已经为我们提供了很多不同格式数据的导入和导出方法,下面这篇文章将具体介绍一些较为常用的方法,包括excel、csv文件以及数据库的导入导出等。

数据导入和导出是pandas中很基础且重要的一个部分。pandas提供了很多不同格式数据的导入和导出方法,可以将其他格式数据转为DataFrame格式。我们可以将list、dict格式数据转为DataFrame格式,也可以从本地的csv、json等文本格式数据和sql、MongoDB等数据库中读取和保存数据等等。下面就分别以三大类介绍一些常见的数据格式的导入与导出。

下文中所有的示例代码都是在jupyter notebook中创作,还不太了解jupyter的小伙伴,可以先看看这篇文章哦:数据科学 | 始于Jupyter Notebooks:一份全面的初学者使用指南。

1 list、dict、np.array 格式数据

1.1 list

一般读取一个list,生成的结果如下:

运行结果:

如果读取的list中的每个元素都是一个元组,会发生什么呢?

运行结果:

如果忽略columns的话,第二个list的值不是列名,而是默认生成索引名,如下:

运行结果:

1.2 dict

这里我们以一个字典为数据,看下不同操作的结果有何不同。

直接调用DataFrame进行读取的话,生成的DataFrame结构如下:

运行结果:

需要说明的是:from_dict这个方法只有在pandas 0.23版本后才有,如果在早期的版本如0.19中调用会出现报错。

如果我们想以a,b作为索引,以list中的每个值分别为一列怎么操作呢?

运行结果:

如果进一步想让a、b生成列的话,调用reset_index方法即可。

运行结果:

但是如果我们想把字典的key和value分别生成两列,如何操作呢?

一种方法是:

还有一种方法依然是利用from_dict,不过就需要将value中的list提前转化成字符串,然后再进行操作即可。

1.3 np.array

numpy是比pandas更底层一些的数据操作工具,pandas的很多操作也是基于numpy进行的,比如numpy就支持直接读取txt文件。比如有这样一个txt文件:

一共有4行8列的数据,数据间用空格隔开,表头带有%,那么读取的时候可以用loadtxt函数进行导入:

运行结果:

可以看到数据自动剔除了表头,并且只用了其中指定的列。接下来就可以将array导入到pandas中:

我们就可以得到类似用list构建DataFrame的效果了:

1.4 其他方式

当然需要导入文本并不规则的时候,可以考虑直接利用python中的文件读取来一行一行的读取文件,然后利用json或者re等字符串处理包来处理数据,最后整合成DataFrame:

当然这个方法要结合具体的数据来看,这里就不展开介绍了。

2 文本格式数据

2.1 CSV文件

2.1.1 导入csv数据

常用参数解析:

● filepath_or buffer: str, path object or file-like object。指定传入的文件路径,必须传入的参数。

● sep: str。指定分隔符,默认是逗号分隔符。

● header: int, list or int。指定行数用来作为列名。默认是如果没有传入names参数,则header=0,用第一行作为列名,否则header=None,以传入的names作为列名。另外如果传入的是list,例如[0,1,3],则是以第1、2、4这些行作为多级列名,且中间的行,第3行会被忽略,数据从第5行开始。

● names: array-like, optional。指定文件的列名。如果文件中没有标题行,建议传入此参数。

● index_col: int, str, or sequence  of int / str, or False。指定文件的索引,默认为None。

ex1.csv内容如下:

导入ex1.csv

运行结果:

ex2.csv文件没有标题行

设置sep和header参数,导入ex2.csv

运行结果:

设置sep和names参数,此时header默认为None

运行结果:

对ex1.csv设置多级标题,将第1、2、4行作为标题,数据从第5行开始

运行结果:

导入ex1.csv,指定索引为message一列

运行结果:

导入ex1.csv,指定第1和2列作为多重索引

运行结果:

2.1.2 导出csv数据

参用参数解析:

● path_or_buf: str or file handle。指定保存文件路径,必须传入的参数,默认为None。

● index: bool。导出的csv是否包含索引,默认为True。

● header: bool or list of str。导出的csv是否包含标题行,默认为True。

● sep: str。指定导出的csv文件的分隔符,默认为逗号分隔符。

● encoding: str。指定导出的csv文件的编码,默认为utf-8

2.2 excel文件

2.2.1 导入excel文件

常用参数解析:

read_excel和read_csv的用法差不多,一个需要注意的参数是sheet_name。这个参数是指定读取该excel中具体哪个表的数据,默认为0,即为第一个表。如果传入1,则为第2个表;可指定传入表名,如"Sheet1";也可传入多个表,如[0,'Sheet3'],传入第一个表和名为'Sheet3'的表。

读取ex1.xlsx文件,默认为读取第一个表

运行结果:

读取ex1.xlsx文件的第2个表

运行结果:

读取ex1.xlsx文件的第2个表和名为"Sheet3"的表,返回的是对象是OrderedDict。OrderedDict是dict的子类,与dict不同的是,它记住了内容的顺序。

运行结果:

在这个orderedDict中,有两个key。第一个key是1,对应的value为该表的内容;第二个key是'Sheet3',对应的value是Sheet3表格的内容。我们选取key,就能得到相应的value。

运行结果:

运行结果:

2.2.2 导出excel文件

常用参数解析:

● excel_writer: str。指定保存文件路径。

● sheet_name: str。指定excel文件的表名,默认为’Sheet1‘。

● index:bool。是否保存索引,默认为True。

2.3 txt文件

2.3.1 导入txt文件

常用参数解析:

read_table与read_csv的唯一区别是,read_csv默认的sep参数是逗号分隔符,而read_table默认是'\t',制表符。所以这两个方法是通用的,只要设置好分隔符,都可以读取csv和txt文件。

ex3.txt文件的内容如下:

导入ex3.txt文件

运行结果:

将sep参数设置为逗号,同样能读取ex1.csv文件

运行结果:

2.3.2 导出txt文件

使用to_csv的方法

2.4 csv和xlsx的选择

当我们可以选择保存为csv或者xlsx格式,方便下次可以使用的时候,是选择保存为csv还是excel呢?除了考虑csv和excel文件大小之外(相同的数据下excel文件比csv文件小),这里可以考虑下read_csv和read_xlsx的性能问题。在stackoverflow上有人对这两种导入方法进行了一个简单的测试。

测试文件:同样的数据集(分别是320MB的csv文件和16MB的xlsx文件)

电脑硬件:i7-7700k,SSD

python环境:Anaconda Python 3.5.3, pandas 0.19.2

2.5 json

2.5.1 导入json文件

常用参数解析:

● path_or_buf: 指定文件路径,默认为None,必须传入的参数。

●orient: json字符串格式,默认为None。这里有split,records,index,columns,values五种选择可选。

● typ: 要转换为series还是dataframe,默认为frame。当typ=frame时,orient可选split/records/index,默认为columns;当typ=series,orient可选split/records/index/columns/value,orient默认为index。

split格式:dict like {index -> [index], columns -> [columns], data -> [values]}, 例如下面的ex4.json文件。

导入ex4.json

运行结果:

records格式:list like [{column -> value}, ..., {column -> value}],例如下面的ex5.json文件。

导入ex5.json

导入ex5.json

运行结果同上。

如果是转为series格式:

运行结果:

index格式: dict like {index -> {column -> vlaue}},例如下面的ex6.json文件。

导入ex6.json

运行结果:

如果是转为series格式:

运行结果:

columns格式:dict like {column -> {index -> value}},例如下面的ex7.json文件。当typ='frame'时,orient默认为这个格式。

导入ex7.json

运行结果:

用columns格式读取ex6.json,其实与index格式的结果是行列的转置。

运行结果:

values格式:just the values array,例如下面的ex8.json文件。

导入ex8.json

运行结果:

2.5.2 导出json文件

常用参数解析:

● orient: string。指定导出json的格式。DataFrame默认是columns,Series默认是index

dataframe导出json,命名为out_ex4.json

series导出json,命名为out_ex5.json

3 数据库

3.1 MySQL

在开始之前,请确保环境中的python为3.x版本,且已经安装并开启mysql服务。这里我们使用pymysql库来连接mysql。首先需要通过pip安装pymysql。安装后,可以通过import语句检验是否已经安装成功。如果没有报错,则说明安装成功。

3.1.1 数据导入mysql

3.1.2 读取mysql数据

通过sql语句查询数据

运行结果:

将结果转换为Dataframe格式

运行结果:

关闭数据库连接:

3.2 PostgreSQL

psycopg2是Python语言的PostgreSQL数据库接口之一,这里我们使用psycopg2连接,首先同样请确保环境中已经安装postgreSQL,以及已通过pip安装psycopg2了。

3.2.1 读取postgreSQL的数据

返回的data结果是一个以各行数据为元组的列表,如下:

可以通过pandas对data进行进一步处理:pd.DataFrame(data)。

在insert的时候,需要注意以下几点:

1.表中的字段不需要加引号;

2.插入的每行数值用括号包围,其中各个字段以逗号间隔,字符串型必须加引号;

3.以上sql命令可见,一条sql命令可以插入多条数据,只需要连接各个数据,最终commit一次就好;

4.另外在写入PG的时候,应该注意PG中的数据如果出现单引号“ ' ”会出现错误,所以必须先使用replace替换成其他的内容方可写入。

3.2.2 数据写入postgreSQL

3.3  支持多种数据库 — SQLAlchemy

SQLAlchemy是python下的一款数据库对象关系映射工具(ORM工具),能满足大多数数据库操作需求,且支持多种数据库引擎,能连接上文提及的MySQL, PostgreSQL, Oracle之外,还支持Mircosoft SQL Server, SQLite等的数据库。另外在pandas中,配合使用SQLalchemy连接数据库,可以实现更简便高效的查询和导入数据的操作,因为pandas已经帮你写好一些常用的方法了。

下面我们以连接mysql数据库为例子介绍用法,首先还是需要先通过pip安装sqlalchemy和pymysql。

3.3.1 读取数据库数据

在pandas中,我们可以通过read_sql_table和read_sql的方法来读取数据库,pandas会帮我们将结果直接转为Dataframe的格式,这对于需要Dataframe格式数据的来说是非常方便的。

读取数据下现有所有的表

运行结果:

读取数据库下某个表的数据

运行结果:

根据sql语句查询数据:

运行结果:

3.3.2 数据导入数据库

将Dataframe格式的数据导入到数据库中,我们可以使用to_sql的方法。

● name:导入库的表的名字

● if_exists:默认为"fail",表示如果表不存在,直接报错;可选"replace",导入的Dataframe直接覆盖该表;可选"append",将数据添加到表的后面。

3.4 MongoDB

MongoDB 是目前最流行的 NoSQL 数据库之一,使用的数据类型 BSON(类似 JSON)。这里我们使用PyMongo连接MongoDB数据库。

3.4.1 将数据导入数据库

3.4.2 读取数据库数据

运行结果:

运行结果:

运行结果:

参考文献:

1.《Python for Data Analysis》

2.pandas官方文档:

https://pandas.pydata.org/pandas-docs/stable/index.html

3.https://stackoverflow.com/questions/31362573/performance-difference-in-pandas-read-table-vs-read-csv-vs-from-csv-vs-read-e

4.https://www.runoob.com/python3/python3-mysql.html

5.https://www.runoob.com/python3/python-mongodb.html

相关文章推荐

在数据科学领域,有大量随手可得的算法包可以直接使用。当我们了解了各种模型的数学原理、并清楚自己想要调用的模型后就可以直接调用相关的算法包来实现整个过程、分析结果,但是这些已经搭建好的算法包背后的数学原理却很少有人深究,所以在数据处理和分析过程中可能会得出很多谬论或者非理想的结果。随机森林模型现在为业界广泛使用的模型之一,所以下文将对Scikit-learn包对随机森林模型特征重要性分析存在的问题进行一些讨论,希望能对今后调用随机森林模型相关包的同学起到一些帮助。

点击蓝字标题,即可阅读 《数据科学 | 避坑!Python特征重要性分析中存在的问题》

其他

数据科学 | 『运筹OR帷幄』数据分析、可视化、爬虫系列教程征稿通知

号外!『运筹OR帷幄』入驻知识星球!

随着算法相关专业热度和难度岗位对专业人才要求的提高,考研、读博、留学申请、求职的难度也在相应飙升。

『运筹OR帷幄』特建立『算法社区』知识星球,依托社区30w+专业受众和25+细分领域硕博微信群,特邀国内外名校教授、博士及腾讯、百度、阿里、华为等公司大咖与大家一起聊算法。快来扫码加入,点对点提问50位大咖嘉宾!

# 加入知识星球,您将收获以下福利 #

● 全球Top名校教授|博士和名企研发高管一起交流算法相关学术|研发干货

● 中国你能说出名字的几乎所有大厂|欧美数家大厂(资深)算法工程师入驻

● 依托『运筹OR帷幄』30w+专业受众和25+细分领域硕博微信群的算法技术交流

● 以上所有公司|高校独家内推招聘|实习机会、多家offer选择指导

● 以面试题|作业题|业界项目为学习资料学习算法干货,从小白变成大咖

● 不定期的线上、线下交流会和聚会,拓展人脉

温馨提示

可以在 公众号后台 回复关键词:“数据导入”获取本文的示例代码与文件,如果觉得有用, 请勿吝啬你的留言和赞哦!~

—— 完 ——

文章申明

Oct. 2019

文章作者:杨士锦 周岩 书生

责任编辑:杨士锦

审核编辑:阿春

微信编辑:玖蓁

本文由『运筹OR帷幄』原创发布

如需转载请在公众号后台获取转载须知

优质公众号推荐

点击查看详情

   

csv导入pgsql不成功_数据科学 | pandas数据导入与导出相关推荐

  1. 大数据数据科学家常用面试题_面试有关数据科学,数据理解和准备的问答

    大数据数据科学家常用面试题 问题1:在数据科学术语中,您如何称呼所分析的数据? (Q1: In the data science terminology, how do you call the da ...

  2. 独家 | 展望未来:数据科学、数据工程及技术(附链接)

    作者:SeattleDataGuy (Zack Shapiro)翻译:殷之涵 校对:欧阳锦本文约2800字,建议阅读8分钟本文通过6位科技工作者的观察及感受,为大家介绍2021年即将发生在数据科学及数 ...

  3. 读书笔记数据科学入门————数据科学导论

    数据科学导论 数据的用处:在数据中寻找隐藏问题的答案 数据科学是什么:就是从数据中剥离出真理. 在实际生活中数据的重要性,例如Facebook上的家乡居住地信息,不仅可以帮助朋友找到你的位置,同时网站 ...

  4. 数据科学-通过数据探索了解我们的特征

    简介 对于数据科学而言,我们要做的第一件事情,必然是了解我们的数据.而在数据探索期间,pandas和matplotlib 则是我们进行数据探索的利器.本文主要分为三个部分,第一部分是利用pandas进 ...

  5. 「数据科学」数据科学家为什么该学习PostgreSQL

    SQL是成为数据科学家的必要条件吗?答案是肯定的.数据科学已经发展了,虽然许多数据科学家仍然使用CSV文件(值以逗号分隔的文本文件),但它们不是最好的选择.Python Panda库允许从CSV文件加 ...

  6. 什么是数据科学?数据科学的基本内容

    作者:鄂维南 什么是数据科学?它和已有的信息科学.统计学.机器学习等学科有什么不同?作为一门新兴的学科,数据科学依赖两个因素:一是数据的广泛性和多样性:二是数据研究的共性.现代社会的各行各业都充满了数 ...

  7. 【数据科学】数据治理与数据认责概述

    一.本文预期读者: • 企业领导 • 各主要业务部门领导 • 技术执行管理人员:在客户数据治理路线规划.设计和实施当中,需要资 深的管理人员支持. • 数据管理相关部门:负责客户数据管理和监管报送相关 ...

  8. 【数据科学】数据科学家犯下的13个常见错误以及如何避免这些错误

    介绍 所以你已经决定数据科学是适合你的领域.越来越多的企业正在变得数据化,世界变得越来越紧密,看起来每个企业都需要数据科学实践.因此,对数据科学家的需求是巨大的.更好的是,每个人都承认行业人才短缺. ...

  9. 数据科学 | Python数据科学常用库

    Python 在解决数据科学任务和挑战方面继续处于领先地位. 目录 核心库 IPython NumPy SciPy Pandas StatsModels 可视化 Matplotlib Seaborn ...

最新文章

  1. https和http有什么区别?看下面介绍就知道了!
  2. 指纹传感器沾水便失效的原因解析
  3. delphi开发的小技巧----------------http://www.cto360.com/a/5000086716.shtml
  4. 【Java基础】多线程
  5. 专家:未来互联网金融行业人才缺口将超百万
  6. oracle独立事务,Oracle中独立事务的处理
  7. nginx php mysql 部署_Linux+Nginx+Mysql+Php运维部署
  8. jdk版本 linux更改was_如何在 Linux 上安装 Java
  9. a标签 vue 动态点击_vue基础那点事
  10. Jmeter测试并发https请求成功了
  11. 一般二叉树的顺序存储Java_100-顺序存储二叉树思路图解
  12. Spring框架学习笔记03:初探Spring——利用注解配置类取代Spring配置文件
  13. 智能循迹小车_校园智能车障碍断路方案浅谈
  14. Flutter监听网络变化
  15. Windows系统下使用维基百科中文语料训练Word2Vec词向量
  16. kali 清理系统垃圾文件
  17. 使用pkg打包node应用
  18. win10永久自动更新服务器,win10彻底永久关闭自动更新的方法【已验证有效】
  19. 一口气说出 OAuth2.0 的四种授权方式,面试官会高看一眼
  20. 使用GIMP for Mac

热门文章

  1. 配置普通,长得丑,OPPO R11凸显OPPO创新乏力
  2. Nginx之二:nginx.conf简单配置(参数详解)
  3. 使用 IntraWeb (26) - 基本控件之 TIWMenu
  4. Matrix使用的分析
  5. 14.初步解析document的核心元数据以及图解剖析index创建反例
  6. idea 删除补丁_带着好奇心去探索IDEA
  7. 右键菜单_右键菜单太长会导致电脑卡顿?轻松删除右键菜单无用项
  8. 印染面料产品出现纬斜疵病,应该怎么防止?
  9. Linux auditd rules generate 通用linux审计规则生成工具DevOps CI/CD持续集成交付 tools
  10. RabbitMQ如何解决被重复消费和数据丢失的问题?