如何將 Pandas DataFrame 儲存為 gzip/zip 檔案?


可以使用 Python 中的 **gzip 和 zipfile** 模組將 Pandas DataFrame 儲存為 gzip/zip 格式。Pandas 是一個用於資料操作和分析的 Python 庫。它提供了一個二維標記資料結構,其列可能具有不同的資料型別。為了減小 DataFrame 的大小,我們需要將其儲存為 gzip/zip 格式。在本文中,我們將瞭解如何將 Pandas DataFrame 儲存為 gzip/zip 檔案。

演算法

下面編寫了一個將 Pandas DataFrame 儲存為壓縮的 gzip/zip 檔案的通用演算法。但是,此演算法的確切實現可能因具體的用例和使用的檔案格式而異。例如,如果使用 PyArrow 和 Parquet 格式,則該演算法需要使用 PyArrow 庫將 DataFrame 轉換為 Parquet 表,然後再將其儲存到壓縮檔案。

  • 匯入必要的庫:Pandas、gzip/zip 庫(例如,zipfile 用於 zip 壓縮,gzip 用於 gzip 壓縮)和 PyArrow(如果使用 Parquet 格式)。

  • 載入或建立要儲存為壓縮檔案的 Pandas DataFrame。

  • 選擇要使用的壓縮方法(gzip 或 zip),並使用相應的庫開啟要寫入的檔案物件。例如,如果使用 gzip,則可以使用“gzip.open”建立檔案物件。

  • 使用適當的方法(例如 to_csv、to_pickle、to_parquet)將 DataFrame 儲存到檔案物件,並將“compression”引數設定為所選的壓縮方法。

  • 關閉檔案物件。

方法 1:使用 to_csv() 方法

將 Pandas DataFrame 儲存為 Gzip 檔案

Gzip 是一種用於在 Python 中壓縮檔案的壓縮格式。它用於 Linux 和 UNIX 作業系統。要將 Pandas DataFrame 儲存為 gzip 檔案,我們需要匯入 gzip 模組並使用其 open() 方法以寫入模式建立檔案物件。然後,將檔案物件傳遞給 DataFrame 物件的 **to_csv()** 方法。

語法

df.to_csv('data.csv.gz', index=False, compression='gzip')

在這裡,to_csv() 方法將 Pandas DataFrame 儲存為具有 gzip 壓縮的壓縮 CSV 檔案。“index=False”引數指定索引列不應包含在輸出檔案中,“compression='gzip'”引數告訴該方法對輸出檔案應用 gzip 壓縮。

示例

在下面的程式碼中,我們建立了一個包含三列(姓名、年齡和薪水)的 DataFrame,並將其儲存為名為“data.gz”的 gzip 檔案。我們使用了 **with** 語句來確保在將 DataFrame 寫入檔案物件後關閉該物件。“index=False”引數告訴 to_csv() 方法不要將行索引寫入檔案。

import pandas as pd
import gzip

# Create a DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie'],
      'Age': [25, 30, 35],
      'Salary': [50000, 60000, 70000]}
df = pd.DataFrame(data)

# Save DataFrame as a gzip file
with gzip.open('data.gz', 'wb') as f:
   df.to_csv(f, index=False)

輸出

DataFrame 將被儲存為 gzip 檔案,檔案內容如下所示:

Name,Age,Salary
Alice,25,50000
Bob,30,60000
Charlie,35,70000

將 Pandas DataFrame 儲存為 Zip 檔案

Zip 是一種流行的壓縮檔案格式,主要用於 Windows 作業系統。Python 中的 zipfile 模組提供了一種簡單的方法來將 Pandas DataFrame 儲存為壓縮的 zip 檔案。

要將 Pandas DataFrame 儲存為 zip 檔案,我們需要匯入 zipfile 模組並使用其 ZipFile() 方法以寫入模式建立一個 ZipFile 物件。然後,我們可以使用 ZipFile 物件的 open() 方法在 zip 檔案中建立一個檔案物件。最後,我們可以將此檔案物件傳遞給 DataFrame 物件的 to_csv() 方法。

示例

在下面的程式碼中,我們建立了一個包含三列(姓名、年齡和薪水)的 DataFrame,並將其儲存為名為“data.zip”的 zip 檔案。我們使用了 **with** 語句來確保在將 DataFrame 寫入檔案物件後關閉該物件。“compression=zipfile.ZIP_DEFLATED”引數告訴 ZipFile 物件使用 DEFLATE 壓縮演算法。ZipFile 物件的 open() 方法在名為“data.csv”的 zip 檔案中建立一個檔案物件。“index=False”引數告訴 to_csv() 方法不要將行索引寫入檔案。

import pandas as pd
import zipfile

# Create a DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie'],
   'Age': [25, 30, 35],
   'Salary': [50000, 60000, 70000]}
df = pd.DataFrame(data)

# Save DataFrame as a zip file
with zipfile.ZipFile('data.zip', 'w', compression=zipfile.ZIP_DEFLATED) as z:
   with z.open('data.csv', 'w') as f:
   df.to_csv(f, index=False)

輸出

Name	Age	Name
Alice	25	Alice
Bob	30	Bob
Charlie	35	Charlie

方法 2:使用帶 gzip/zip 壓縮的 to_pickle() 方法

DataFrame 物件的 to_pickle() 方法可用於將 DataFrame 儲存為具有 gzip 或 zip 壓縮的 pickle 檔案。

語法

df.to_pickle('data.pkl.gz', compression='gzip')
df.to_pickle('data.pkl.zip', compression='zip')

在這裡,**to_pickle()** 方法將 Pandas DataFrame 儲存為具有 gzip 或 zip 壓縮的壓縮 pickle 檔案。“compression='gzip'”或“compression='zip'”引數告訴該方法對輸出檔案應用 gzip 或 zip 壓縮。

示例

在下面的程式碼中,我們分別使用 to_pickle() 方法將 DataFrame 儲存為具有 gzip 和 zip 壓縮的 pickle 檔案。“compression='gzip'”或“compression='zip'”引數告訴該方法對輸出檔案應用 gzip 或 zip 壓縮。

import pandas as pd

# Create a DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie'],
      'Age': [25, 30, 35],
      'Salary': [50000, 60000, 70000]}
df = pd.DataFrame(data)

# Save DataFrame as a gzipped pickle file
df.to_pickle('data.pkl.gz', compression='gzip')

# Save DataFrame as a zipped pickle file
df.to_pickle('data.pkl.zip', compression='zip')

輸出

Name	Age	Name
Alice	25	Alice
Bob	30	Bob
Charlie	35	Charlie

方法 3:使用帶 gzip/zip 壓縮的 to_parquet 方法

DataFrame 物件的 to_parquet() 方法可用於使用 PyArrow 庫將 DataFrame 儲存為具有 gzip 或 zip 壓縮的 Parquet 檔案。

語法

pq.write_table(table, 'data.parquet.gz', compression='gzip')
pq.write_table(table, 'data.parquet.zip', compression='snappy')

在這裡,write_table() 方法使用 PyArrow 庫將 Pandas DataFrame 儲存為壓縮的 Parquet 檔案。“compression='gzip'”或“compression='snappy'”引數告訴該方法對輸出檔案應用 gzip 或 snappy 壓縮。

示例

import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq

# Create a DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie'],
      'Age': [25, 30, 35],
      'Salary': [50000, 60000, 70000]}
df = pd.DataFrame(data)

# Convert DataFrame to PyArrow table
table = pa.Table.from_pandas(df)

# Save PyArrow table as a gzipped Parquet file
pq.write_table(table, 'data.parquet.gz', compression='gzip')

# Save PyArrow table as a zipped Parquet file
pq.write_table(table, 'data.parquet.zip', compression='snappy')

輸出

Name	Age	Name
Alice	25	Alice
Bob	30	Bob
Charlie	35	Charlie

結論

在本文中,我們討論瞭如何使用 Python 將 Pandas DataFrame 儲存為 gzip/zip 檔案。我們使用 gzip 模組建立 gzip 檔案,使用 zipfile 模組建立 zip 檔案。這兩種壓縮格式都廣泛使用,可以幫助減小大型資料檔案的大小,從而更易於儲存和傳輸。對於基於文字的資料,Gzip 的壓縮率通常更好,而 zip 檔案更適合壓縮二進位制檔案,如影像或其他非文字資料。

更新於:2023年7月11日

6000+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告