久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

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

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

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


讀寫 csv 的正確姿勢(shì)

假如要保存下面這個(gè) DataFrame


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

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

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

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

保存 index 的 csv

不保存 index 的 csv

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

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

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

index_col = 0 

實(shí)現(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 這個(gè)參數(shù),為什么取 utf-8-sig 呢,?,,常見的還有 utf-8,這兩者區(qū)別聯(lián)系何在,?

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

不止 csv 和 excel

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


實(shí)際上所有的內(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,,即逗號(hào)分隔值,見名知意,,每行各個(gè)字段是以逗號(hào)分隔的,。

常見的還有 tsv,即 Tab 制表符分隔,,其實(shí),,這個(gè)分隔符,我們可以自定義,,以 ,!、&,、@ 等字段值中幾乎不會(huì)出現(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

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


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


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

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多