pandas.DataFrame——pd數據框的簡單認識、存csv文件

接着前天的豆瓣書單信息爬取,這一篇文章看一下利用pandas完成對數據的存儲。python

回想一下咱們當時在最後獲得了六個列表:img_urls, titles, ratings, authors, details。sql

咱們如何對這些數據進行存儲:讓每一本書的每個元素能夠一一對應起來,造成第一本書的書名、做者等等在一塊兒,下一本書的書名、做者在一塊兒。數據庫

這裏咱們接觸一個新的數據存儲形式:pandas庫裏的DataFrame。數據結構

 

 

pandas.DataFrame()編碼

DataFrame是一個表格型的數據結構,它含有一組有序的列,每列能夠是不一樣的值類型(數值、字符串、布爾值等)。DataFrame既有行索引也有列索引,它能夠被看作由Series組成的字典(共用同一個索引)。跟其餘相似的數據結構相比(如R的data.frame),DataFrame中面向行和麪向列的操做基本上是平衡的。其實,DataFrame中的數據是以一個或多個二維塊存放的(而不是列表、字典或別的一維數據結構)。url

  • 簡單來講,它相似於excel,是一種二維表。
  • 或許說它可能有點像matlab的矩陣,可是matlab的矩陣只能放數值型值(固然matlab也能夠用cell存放多類型數據);而DataFrame的單元格能夠存放數值、字符串等,這和excel表很像。
  • 同時DataFrame也能夠設置列名columns與行名index。能夠經過像matlab同樣經過位置獲取數據,也能夠經過列名和行名定位,具體方法等我學到那裏了再說哈哈哈。

看下列代碼↓spa

1 import pandas as pd
2 result = pd.DataFrame()
3 authors=['file','edit','format','run','options']
4 numbers=[1,2,3,4,5]
5 result['authors']=authors
6 result['numbers']=numbers

咱們獲得的 result,這個DataFrame對象會長這個樣子:excel

>>> result
   authors  numbers
0     file        1
1     edit        2
2   format        3
3      run        4
4  options        5

它看上去是否是真的很像 excel !code

並且若是若是兩列數據量不一樣,好比上面的authors有5個值,而numbers卻有6個值就會報錯Length of values does not match length of index。
orm

 

 

用DataFrame對數據進行.csv存儲

進入正題,看看咱們如何對爬蟲的數據進行存儲:

1 import pandas as pd
2 result = pd.DataFrame()
3 result['img_urls'] = img_urls
4 result['titles'] = titles
5 result['ratings'] = ratings
6 result['authors'] = authors
7 result['details'] = details
8 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參數就能解決亂碼問題。

相關文章
相關標籤/搜索