<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Pandas庫 | 高速讀取csv文件的方法

          共 1717字,需瀏覽 4分鐘

           ·

          2022-04-28 17:23

          ↑?關(guān)注 + 星標(biāo)?,每天學(xué)Python新技能

          后臺回復(fù)【大禮包】送你Python自學(xué)大禮包


          問題場景

          當(dāng)遇到特別大的csv文件,例如500M,pandas讀取會很慢,在之前教程中要使用其他包另類的語法。現(xiàn)在只需更新pandas,加一個(gè)參數(shù)即可。

          在本文中,我們將介紹:

          • Pandas 的默認(rèn) CSV讀數(shù)據(jù), v1.4 中引入的更快、更并行的 CSV解析器。
          • 一種不同的方法可以使事情變得更快。
          • 讀取 CSV,默認(rèn)方式

          碰巧有一個(gè) 850MB 的 CSV 文件,這是使用 Pandas 加載它的默認(rèn)方式:

          ##?更新pandas
          !pip3?install?--upgrade?pandas
          import?pandas?as?pd

          df?=?pd.read_csv("large.csv")

          下面是舊的pandas版本代碼讀數(shù)據(jù)所消耗時(shí)間

          0m13.245s


          使用pyarrow讀csv

          2022年1月份,剛剛發(fā)布的pandas1.4版本增加了arrow庫的csv解析器。對了,該功能仍然處于試驗(yàn)階段,不是默認(rèn)解析器,但是足夠快。下面是新版本用法

          import?pandas?as?pd

          df?=?pd.read_csv("large.csv",?engine="pyarrow")

          新版本代碼讀數(shù)據(jù)所消耗時(shí)間

          0m6.507s

          CSV解析器CPU運(yùn)行時(shí)間
          默認(rèn)C13.2s
          PyArrow6.5s

          需要注意,如果你的數(shù)據(jù)分析項(xiàng)目已經(jīng)使用了并行加速數(shù)據(jù)的讀取,那么今天的新教程(pyarrow)并不會特別顯著改善代碼運(yùn)行速度(十幾倍加速),但至少可能提供有意義的加速(一倍左右)。


          重新思考

          加載 CSV 基本上是一項(xiàng)繁重的工作:

          • 需要分成幾行。
          • 需要用逗號分隔每一行。
          • 需要處理字符串引用。
          • 需要猜測(!)列的類型,除非您明確地將它們傳遞給 Pandas。
          • 需要將字符串轉(zhuǎn)換為整數(shù)、日期和其他非字符串類型。

          所有這些都需要 CPU 時(shí)間。

          如果您從第三方獲取 CSV,并且只處理一次,那么您對此無能為力。但是,如果您多次加載同一個(gè) CSV 文件怎么辦?或者,如果您是在數(shù)據(jù)處理管道的其他部分生成輸入文件的人,該怎么辦?

          您可以讀取其他一些處理速度更快的文件格式,而不是讀取 CSV。讓我們看一個(gè)例子,使用 Parquet 數(shù)據(jù)格式。Parquet 文件旨在快速讀取:您不必像使用 CSV 那樣進(jìn)行大量解析。與 CSV 不同,其中列類型在文件讀取時(shí)無需編碼,在 Parquet 中,列的類型存儲在實(shí)際文件中。

          首先,我們將 CSV 文件轉(zhuǎn)換為 Parquet 文件;我們禁用壓縮,因此我們正在與 CSV 進(jìn)行更多的蘋果對蘋果的比較。當(dāng)然,如果您是第一個(gè)生成文件的人,則不需要轉(zhuǎn)換步驟,您可以直接將數(shù)據(jù)寫入 Parquet。

          import?pandas?as?pd

          df?=?pd.read_csv("large.csv")
          df.to_parquet("large.parquet",?compression=None)

          現(xiàn)在我們的數(shù)據(jù)存在于large.parquet中,再讀取large.parquet看看讀取時(shí)間

          import?pandas?as?pd

          df?=?pd.read_parquet("large.parquet",?engine="fastparquet")

          2.441s

          CSV解析器CPU運(yùn)行時(shí)間
          默認(rèn)C13.2s
          PyArrow6.5s
          fastparquet2.4s

          純粹由 CPU 衡量,fastparquet 是迄今為止最快的。?這只是一個(gè)例子。但顯然閱讀 Parquet 格式的效率要高得多。


          最好的文件格式不是 CSV

          CSV 是一種糟糕的格式。除了解析效率低下之外,缺少類型數(shù)據(jù)意味著解析總是比具有實(shí)際列類型的結(jié)構(gòu)化文件格式更容易出錯(cuò)和模棱兩可。因此,如果可以,請避免使用 CSV 并使用更好的格式,盡量選擇其他高效類型,如 Parquet。

          如果你被 CSV 卡住了,考慮在 Pandas 1.4 中使用新的 PyArrow CSV 解析器;你會得到很好的加速,特別是如果你的程序當(dāng)前沒有利用多個(gè) CPU。

          微軟放大招!這次能干掉 Linux 桌面?

          瀏覽 289
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲成人综合色图 | 国产白丝袜足交网站大全 | 五月天婷婷丁香激情 | 1级片黄页网站 | 日本黄色视频网址电影 |