Hub 文件

編輯數據集

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

編輯數據集

Hub 支援社群與研究數據集的協作策展。我們鼓勵您探索 Hub 上現有的數據集,並為改善它們做出貢獻,以協助壯大機器學習社群並加速所有人的進步。歡迎任何形式的貢獻!

如果您還沒有帳號,請先建立一個 Hugging Face Hub 帳號

使用 Hub UI 進行編輯

此功能目前僅支援 CSV、TSV 和 Parquet 格式的數據集。

Hub 的網頁介面允許不具備任何技術背景的用戶編輯數據集。

開啟數據集頁面並導航至 Data Studio 標籤頁即可開始編輯。

點擊 Toggle edit mode (切換編輯模式) 以啟用數據集編輯。

您可以根據需要編輯任意數量的儲存格,最後點擊 Commit (提交) 以送出變更並留下提交訊息。

使用 huggingface_hub 客戶端函式庫

huggingface_hub 函式庫可以管理 Hub 儲存庫,包括編輯數據集。

例如,以下是如何使用 Hugging Face FileSystem API 編輯 CSV 檔案的方法:

from huggingface_hub import hffs

path = f"datasets/{repo_id}/data.csv"

with hffs.open(path, "r") as f:
    content = f.read()
edited_content = content.replace("foo", "bar")
with hffs.open(path, "w") as f:
    f.write(edited_content)

您也可以在本地硬碟上進行編輯並提交變更。

from huggingface_hub import hf_hub_download, upload_file

local_path = hf_hub_download(repo_id=repo_id, path_in_repo= "data.csv", repo_type="dataset")

with open(path, "r") as f:
    content = f.read()
edited_content = content.replace("foo", "bar")
with open(path, "w") as f:
    f.write(edited_content)

upload_file(repo_id=repo_id, path_in_repo=local_path, repo_type="dataset")

若要將整個數據集儲存庫保留在本地並一次編輯多個檔案,請使用 snapshot_downloadupload_folder,而不是 hf_hub_downloadupload_file

請造訪 客戶端函式庫文件 以了解更多資訊。

整合的函式庫

如果 Hub 上的數據集與 受支援的函式庫 相容,只需幾行程式碼即可載入、編輯並推送該數據集。

以下是如何使用 Pandas 編輯 CSV 檔案的方法:

import pandas as pd

# Load the dataset
df = pd.read_csv(f"hf://datasets/{repo_id}/data.csv")

# Edit
df = df.apply(...)

# Commit the changes
df.to_csv(f"hf://datasets/{repo_id}/data.csv")

像 Polars 和 DuckDB 這類函式庫也實作了 hf:// 協定,用於讀取、編輯和寫入 Hugging Face 上的檔案。此外,其他函式庫(如 Spark、Dask 或 🤗 Datasets)對於編輯包含多個檔案的數據集也很有用。請在此處查看 受支援函式庫的完整列表

關於如何在網站上存取數據集的資訊,您可以點擊數據集頁面上的「Use this dataset」按鈕來查看操作方法。例如,samsum 下方展示了如何使用 🤗 Datasets 進行操作。

僅上傳新資料

Hugging Face 的儲存系統由 Xet 提供技術支援,該系統使用區塊去重 (chunk deduplication) 來提高上傳效率。與傳統雲端儲存不同,Xet 不需要為了提交變更而重新上傳整個數據集。相反,它會自動偵測數據集中哪些部分發生了變化,並指示客戶端函式庫僅上傳已更新的部分。為了做到這一點,Xet 使用了一種智慧演算法來尋找 Hugging Face 上已存在的 64kB 數據區塊。

讓我們看看之前使用 Pandas 的範例:

import pandas as pd

# Load the dataset
df = pd.read_csv(f"hf://datasets/{repo_id}/data.csv")

# Edit part of the dataset
df = df.apply(...)

# Commit the changes
df.to_csv(f"hf://datasets/{repo_id}/data.csv")

這段程式碼首先載入數據集然後進行編輯。一旦編輯完成,to_csv() 會將檔案實體化到記憶體中,進行分塊處理,詢問 Xet 哪些區塊已存在於 Hugging Face,哪些區塊發生了變化,然後僅上傳新的資料。

最佳化 Parquet 編輯

需要上傳的資料量取決於編輯內容和檔案結構。

Parquet 格式是列式儲存並在頁面層級 (page level) 進行壓縮 (每個頁面約 ~1MB)。我們透過 Parquet Content Defined Chunking (內容定義分塊) 為 Xet 最佳化了 Parquet,這確保了未變更的資料通常會產生未變更的頁面。

例如,此程式碼會上傳 df 的內容,而對於 edited_df,由於它僅上傳發生變化的區塊,因此上傳速度更快。

import pandas as pd

df.to_parquet(
    "hf://datasets/username/my_dataset/imdb.parquet",
    # Optimize for Xet
    use_content_defined_chunking=True,
    write_page_index=True,
)

edited_df = ...  # e.g. with added/modified/removed rows or columns

edited_df.to_parquet(
    "hf://datasets/username/my_dataset/imdb.parquet",
    # Optimize for Xet
    use_content_defined_chunking=True,
    write_page_index=True,
)

資料塊約為 64kB,且 Parquet 逐欄儲存資料,因此在編輯優化後的 Parquet 檔案時,實際發生的情況如下:

  • 新增一欄 -> 僅上傳該新欄的資料塊。
  • 新增/編輯/刪除一列 -> 每一欄會各上傳一個資料塊。

此外,包含元資料 (metadata) 的 Parquet 頁尾資料塊也會被上傳。

請在 受支援的函式庫 頁面中查看您的函式庫是否支援最佳化 Parquet。

串流 (Streaming)

對於大型數據集,建議使用具備數據串流功能的函式庫來進行端到端的串流處理。在這種情況下,數據集處理會隨著舊資料的到達與新資料上傳至 Hub 的過程中逐步進行。

請在 受支援的函式庫 頁面中查看您的函式庫是否支援串流處理。

在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.