pandas.DataFrame——pd数据框的简单认识、存csv文件
接着前天的豆瓣书单信息爬取,这一篇文章看一下利用pandas完成对数据的存储。
回想一下我们当时在最后得到了六个列表:img_urls, titles, ratings, authors, details。
我们如何对这些数据进行存储:让每一本书的每一个元素可以一一对应起来,形成第一本书的书名、作者等等在一起,下一本书的书名、作者在一起。
这里我们接触一个新的数据存储形式:pandas库里的DataFrame。
pandas.DataFrame()
DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。跟其他类似的数据结构相比(如R的data.frame),DataFrame中面向行和面向列的操作基本上是平衡的。其实,DataFrame中的数据是以一个或多个二维块存放的(而不是列表、字典或别的一维数据结构)。
- 简单来说,它类似于excel,是一种二维表。
- 或许说它可能有点像matlab的矩阵,但是matlab的矩阵只能放数值型值(当然matlab也可以用cell存放多类型数据);而DataFrame的单元格可以存放数值、字符串等,这和excel表很像。
- 同时DataFrame也可以设置列名columns与行名index。可以通过像matlab一样通过位置获取数据,也可以通过列名和行名定位,具体方法等我学到那里了再说哈哈哈。
看下列代码↓
import pandas as pd
result = pd.DataFrame()
authors=['file','edit','format','run','options']
numbers=[1,2,3,4,5]
result['authors']=authors
result['numbers']=numbers
我们得到的 result,这个DataFrame对象会长这个样子:
>>> result
authors numbers
0 file 1
1 edit 2
2 format 3
3 run 4
4 options 5
它看上去是不是真的很像 excel !
而且如果如果两列数据量不同,比如上面的authors有5个值,而numbers却有6个值就会报错Length of values does not match length of index。
用DataFrame对数据进行.csv存储
进入正题,看看我们如何对爬虫的数据进行存储:
import pandas as pd
result = pd.DataFrame()
result['img_urls'] = img_urls
result['titles'] = titles
result['ratings'] = ratings
result['authors'] = authors
result['details'] = details
result.to_csv('result.csv',index=None)
- 第二行创建数据框,起名为 result 。
- 第三行~第七行,给数据框添加列(同时给列起名为img_urls, titles 等等)。
- 因为五个列表的元素数量必然是相等的,它们的DataFrame不会报错,同时实现了同一行的内容既是一本书的信息。
- 看一下这里的 result 长什么样↓(这里我为了看得更直观,把 img_urls 和 details 的 result 注释掉了)
>>> result
titles ratings authors
0 白日漫游 8.2 远子/广西师范大学出版社/2019-5
1 不识字的人 9.1 [匈]雅歌塔·克里斯多夫/上海人民出版社/2019-4
2 苔 8.6 周恺/楚尘文化/中信出版集团/2019-5
3 推理时钟 8.7 [日]贵志祐介/新星出版社/2019-5-1
4 本店招牌菜 9.6 [美]斯坦利·艾林/新星出版社/2019-4
5 格雷厄姆·格林短篇小说全集 评价人数不足 [英]格雷厄姆·格林/外语教学与研究出版社/2019-4
6 大树小虫 8.8 池莉/江苏凤凰文艺出版社/2019-5
7 泽诺的意识 评价人数不足 [意]伊塔洛·斯韦沃/后浪丨四川人民出版社/2019-5
8 才不要让你知道 9.4 方小孬/浙江人民美术出版社/2019-4
9 女鼓手 评价人数不足 [英]约翰·勒卡雷/上海译文出版社/2019-4-1
10 四月在愚人船 8.2 曾铮/武汉大学出版社/2019-5-1这里选取了前十行。虽然DataFrame不会对自己进行排版,但我们仍依稀可见它的存储形式:将列表存为一列,列名是列表名。
- 到这一步,我们可以发现每一行既是一本书的信息。我们使用 result.to_csv('result.csv',index=None) 语句,就实现了csv存储。
- index=None 指不写入行索引(行名称)。在 .to_csv 方法里,index默认为True,所以在这里添加参数 None 是必要的。
- 最后的csv文件在记事本中长这个样子↓
img_urls,titles,ratings,authors,details
https://img3.doubanio.com/view/subject/m/public/s32289202.jpg,白日漫游,8.2,远子/广西师范大学出版社/2019-5,青年作家远子最新力作,以十四篇彼此独立而又互有呼应的短篇小说,刻画在大都市挣扎求生的年轻人,描述一种渴望自由而又无往不在枷锁之中的生活状态。
https://img1.doubanio.com/view/subject/m/public/s32281237.jpg,不识字的人,9.1,[匈]雅歌塔·克里斯多夫/上海人民出版社/2019-4,28个虚构故事和1部自传体小说。《恶童日记》作者雅歌塔流亡记忆的隐秘回响,冷峻精简的语言质感,道尽暗涌的记忆与真实的人生痛感。
https://img1.doubanio.com/view/subject/m/public/s32323469.jpg,苔,8.6,周恺/楚尘文化/中信出版集团/2019-5,一个晚清家族,一出袍哥传奇,一场历史风暴,一曲时代挽歌。在“三千年未有之大变局”下,再现了蜀中各个阶层的人物命运。
https://img1.doubanio.com/view/subject/m/public/s32295228.jpg,推理时钟,8.7,[日]贵志祐介/新星出版社/2019-5-1,贵志祐介的推理短篇小说集,共分为四个短篇,主要描写了侦探榎本与犯罪者的头脑战。本格密室推理佳作,在日本年度推理榜单上屡次上榜。
https://img1.doubanio.com/view/subject/m/public/s32285169.jpg,本店招牌菜,9.6,[美]斯坦利·艾林/新星出版社/2019-4,美国悬疑大师斯坦利•艾林的十六篇短篇小说。
https://img1.doubanio.com/view/subject/m/public/s32322848.jpg,格雷厄姆·格林短篇小说全集,评价人数不足,[英]格雷厄姆·格林/外语教学与研究出版社/2019-4,格雷厄姆·格林一生所有的短篇作品,或讽刺乖张,或冷漠怪异,贯穿着格林特有的人性思考与道德拷问,跳动着格林作品特有的节奏感。
https://img3.doubanio.com/view/subject/m/public/s32284301.jpg,大树小虫,8.8,池莉/江苏凤凰文艺出版社/2019-5,这一场看似门当户对、一见钟情的自由恋爱,却是众人运筹帷幄、通力配合的精密部署。两个人的结合,两个家族的联姻,延展出三代人近百年的跌宕命运。
https://img1.doubanio.com/view/subject/m/public/s32311017.jpg,泽诺的意识,评价人数不足,[意]伊塔洛·斯韦沃/后浪丨四川人民出版社/2019-5,首次将精神分析运用到文学作品里的意大利心理小说,深刻影响乔伊斯《尤利西斯》的创作。
https://img3.doubanio.com/view/subject/m/public/s32279850.jpg,才不要让你知道,9.4,方小孬/浙江人民美术出版社/2019-4,有些可爱的、无法用言语表述的小心动,在脑中像一幕幕电影片段,有细微的表情变化和谁也听不见的心跳。这部作品希望能用画笔记录这须臾的美好。
https://img3.doubanio.com/view/subject/m/public/s32278296.jpg,女鼓手,评价人数不足,[英]约翰·勒卡雷/上海译文出版社/2019-4-1,以色列间谍机构为了刺杀巴勒斯坦恐怖分子哈利勒,招募了一位激进的左翼英国女演员查莉。查莉的良心在两个民族之间摇摆不停,道德观也已被撕扯成碎片。可见csv文件直接把result原封不动地存成了文本文件,添加了逗号+没打印index。虽然粗暴,但是有用!DataFrame()+to_csv()方法很好的完成了我们的任务。
- 最后是一点题外话。如图↓
csv文件在excel中打开出现了中文编码问题,再加上这周二在python课上遇到的python2在sqlite3中输出乱码的问题,我一定要搞出个结果。暂时的感觉是:encode没有问题,问题出在了decode上。python2在写脚本时第一行加上utf-8按理就不会再出现encode的问题,utf-8会根据unicode把所有中文字符化作十六进制,这样就能以二进制的形式存储在数据库里,所以到这里都没问题。猜测sqlite3的输出没有再对二进制的中文正确解码,需要添加decode参数就能解决乱码问题。
pandas.DataFrame——pd数据框的简单认识、存csv文件的更多相关文章
- 用PyQt5来即时显示pandas Dataframe的数据,附qdarkstyle黑夜主题样式(美美哒的黑夜主题)
import sys from qdarkstyle import load_stylesheet_pyqt5 from PyQt5.QtWidgets import QApplication, QT ...
- pandas 学习 第5篇:DataFrame - 访问数据框
数据框是用于存储数据的二维结构,分为行和列,一行和一列的交叉位置是一个cell,该cell的位置是由行索引和列索引共同确定的.可以通过at/iat,或loc/iloc属性来访问数据框的元素,该属性后跟 ...
- pandas dataframe重复数据查看.判断.去重
本文详解如何使用pandas查看dataframe的重复数据,判断是否重复,以及如何去重 dataframe数据样本: import pandas as pd df = pd.DataFrame({' ...
- 从mysql8.0读取数据并形成pandas dataframe类型数据,精确定位行列式中的元素,并读取
from pandas import * import pandas as pd from sqlalchemy import create_engine engine = create_engine ...
- pandas中获取数据框的行、列数
获取数据框的行.列数 # 获取行数 df.shape[0] # 获取行数 len(df) # 获取列数 df.shape[1]
- python3 简单实现从csv文件中读取内容,并对内容进行分类统计
新手python刚刚上路,在实际工作中遇到如题所示的问题,尝试使用python3简单实现如下,欢迎高手前来优化import csv #打开文件,用with打开可以不用去特意关闭file了,python ...
- 使用存储过程将Oracle数据批量导出为多个csv文件
数据库有如下表结构: user_info ( user_id NUMBER primary key, user_name VARCHAR2(200) NOT NUL ...
- python pandas简单使用处理csv文件
这里jira.csv是个大文件 1) >>> import pandas >>> jir=pandas.read_csv(r'C:\Temp\jira.csv') ...
- Pandas dataframe数据写入文件和数据库
转自:http://www.dcharm.com/?p=584 Pandas是Python下一个开源数据分析的库,它提供的数据结构DataFrame极大的简化了数据分析过程中一些繁琐操作,DataFr ...
随机推荐
- Gitlab备份,Crontab定时备份
1:Gitlab备份非常简单,只需要一条命令就可以创建完整的备份 gitlab-rake gitlab:backup:create 使用以上命令,就相当于在/var/opt/gitlab/backup ...
- UILabel和UIbutton(富文本)封装方法
/** 方法说明:设置label的富文本属性 参数说明:contentStr富文本内容 textColor字体颜色 rangeSet设置字体颜色及大小的位置 */ - (UILabel *)backf ...
- 最新Centos7安装python3并与python2共存
1.查看是否已经安装Python CentOS 7.2 默认安装了python2.7.5 因为一些命令要用它比如yum 它使用的是python2.7.5. 使用 python -V 命令查看一下是否安 ...
- For循环执行AFNetworking请求
屏幕快照 2017-12-19 下午1.46.25.png 需求:如下操作打印的文档为 NSLog(@"开始");for(NSIntegeri =0; i <5; i++) ...
- linux系统下安装PHP扩展pcntl
1.查看当前的PHP版本并下载一个同样版本的php(我的是php5.6.22,我下的是php5.6.22) wget http://hk1.php.net/get/php-5.5.10.tar.gz ...
- SNMP4J 总结
一.SNMP4J介绍 SNMP4J是一个用Java来实现SNMP(简单网络管理协议)协议的开源项目.它支持以命令行的形式进行管理与响应.SNMP4J是纯面向对象设计与SNMP++(用C++实现SNMP ...
- vue echarts 大小自适应
窗口大小时候 ,echarts图自适应 在创建图表的方法中直接,用resize方法 let myChart=this.$refs.myChart; let mainChart = echarts.in ...
- Django的ORM基础增删改查
查询 all() 返回模型类对应表格中所有数据,返回查询集 get() 返回表格中满足条件的一条且只能有一条数据 如果查到多条数据,则抛异常:MultipleObjectsReturned 查询不到数 ...
- WPF之Binding【转】
WPF之Binding[转] 看到WPF如此之炫,也想用用,可是一点也不会呀. 从需求谈起吧: 首先可能要做一个很炫的界面.见MaterialDesignInXAMLToolKit. 那,最主要的呢, ...
- 第4章 变量、作用域和内存---JS红宝书书摘系列笔记
一.基本类型和引用类型 ECMAScipt变量可能分为两种数据类型:基本类型和引用类型. 基本类型:指简单的数据段:包括Undefined.Null.Boolean.Number.String:可以操 ...