乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      數(shù)據(jù)分析利器 pandas 系列教程(三):讀寫文件三十六計

       liqualife 2020-06-22
      這是 月小水長 的第 48 篇原創(chuàng)干貨

      前面我們學(xué)完了 pandas 中最重要的兩個數(shù)據(jù)結(jié)構(gòu): Series  DataFrame,今天來侃侃 pandas 讀寫文件的那些 tricks,我有十足的信心,大家看了定會有所收獲。


      讀寫 csv 的正確姿勢

      假如要保存下面這個 DataFrame


      保存到 csv 中,我常用的一行代碼是:

      df.to_csv('exam_result.csv', index=False, encoding='utf-8-sig')

      第一個參數(shù)是保存的文件名,第二個參數(shù)是不保存 index 索引,第三個參數(shù)是指定保存的編碼格式為 utf-8-sig。

      基于實踐是檢驗真理的唯一標(biāo)準(zhǔn)原則,先做一組不保存/保存 index 索引列的對比實驗。

      保存 index 的 csv

      不保存 index 的 csv

      再用 pd.read_csv 分別讀這兩個文件,如果讀取了沒有保存了 index 索引的,直接用下面這行代碼即可:

      df = pd.read_csv('exam_result.csv')

      如果是讀取了保存了 index 索引列的,用上面這句講道理也不會報錯,但是會多出了一個'Unnamed:0'列,稍不注意,就會對 iloc 等后續(xù)操作造成影響,所以必須去掉這一列,可加一個參數(shù):

      index_col = 0 

      實現(xiàn),總結(jié)來說,讀寫 csv,有下面兩種組合方式:

      # wirte of way1
      df.to_csv('exam_result.csv', index=False, encoding='utf-8-sig')
      # read  of way1
      df = pd.read_csv('exam_result.csv')

      # write of way2
      df.to_csv('exam_result.csv', encoding='utf-8-sig')
      # read  of way2
      df = pd.read_csv('exam_result.csv', index_col=0)

      至于 encoding 這個參數(shù),為什么取 utf-8-sig 呢?,常見的還有 utf-8,這兩者區(qū)別聯(lián)系何在?

      • utf-8 是以字節(jié)為編碼單元,它的字節(jié)順序在所有系統(tǒng)中都是一樣的,沒有字節(jié)序問題,因此它不需要 BOM,所以當(dāng)用 utf-8 編碼方式讀取帶有 BOM 的文件時,它會把 BOM 當(dāng)做是文件內(nèi)容來處理, 就會報錯。
      • uft-8-sig 中 sig 全拼為 signature 也就是 帶有簽名的 utf-8,因此 utf-8-sig 讀取帶有 BOM 的 utf-8 文件時會把 BOM 單獨處理,與文本內(nèi)容隔離開,也是我們期望的結(jié)果。
      由于 Windows 下如果設(shè)置為 utf-8,用 Office Excel 打開的話會發(fā)現(xiàn)中文亂碼,因為 Excel 默認(rèn)這個文件是有 BOM 的(BOM 是微軟提出的,必然要在自家產(chǎn)品上推廣),實際上文件沒有 BOM,一來二去就亂碼了,使用  utf-8-sig 可以有效避免這個問題。

      不止 csv 和 excel

      常用的都是 read_csv/to_csv/read_excel/to_excel 這四個來實現(xiàn)讀寫 csv/excel,實際上常用的還有 json html 兩種形式。
      json 讀寫示例
      df.to_json('exam_result.json')
      df = pd.read_json('exam_result.json')
      exam_result.json 內(nèi)容如下:


      實際上所有的內(nèi)容都在一行,為了方便截圖,我展開成了六行;其中 '0','1' 等是 index 而不是下標(biāo),注意區(qū)分。
      html 讀寫示例
      df.to_html('exam_result.html')
      df = pd.read_html('exam_result.html')
      exam_result.html 用瀏覽器打開如下:


      為什么叫 csv
      csv 全稱 Comma Separated Values,即逗號分隔值,見名知意,每行各個字段是以逗號分隔的。

      常見的還有 tsv,即 Tab 制表符分隔,其實,這個分隔符,我們可以自定義,以 !、&、@ 等字段值中幾乎不會出現(xiàn)的字符為宜,如果是字母 a、b、c,容易造成混亂。無論是 csv、tsv 還是 ?sv,都封裝在 read_csv()  函數(shù)中,以 sep 參數(shù)值作為區(qū)分。
      df.to_csv('exam_result.msv', sep='@', index=False, encoding='utf-8-sig')
      df = pd.read_csv('exam_result.msv', sep='@')
      msv 后綴是我隨便起的,只要保證讀寫文件名相同即可。


      讀不太規(guī)范的 csv

      一個不格式太規(guī)范的 csv 舉例如下:


      不規(guī)范之處在于內(nèi)容沒有從表格的左上角開始,如果用常用的· df =pd.read_csv('exam_result.csv')這樣讀,打印的 dataframe 如下:


      這個時候,參數(shù) skiprows(跳過前幾行)和 usecols (只取哪些列) 就派上用場了。
      df = pd.read_csv('exam_result.csv', skiprows=2,usecols=['name','sex','course','grade'])
      活學(xué)活用,利用 usecols,還可以解決前面所說的讀取保存了 index 的 csv,出現(xiàn)'Unnamed:0' 的問題。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多