Hub documentation

Pandas

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Pandas

Pandas, yaygın olarak kullanılan bir Python veri analiz araç setidir. Uzak verileri okumak ve yazmak için fsspec kullandığı için, Hub üzerindeki verileri okumak ve yazmak için Hugging Face yollarını (hf://) kullanabilirsiniz.

Bir DataFrame yükleyin

Verileri yerel dosyalardan veya Hugging Face Datasets gibi uzak depolama alanlarından yükleyebilirsiniz. Pandas, CSV, JSON ve Parquet dahil olmak üzere birçok formatı destekler:

>>> import pandas as pd
>>> df = pd.read_csv("path/to/data.csv")

Hugging Face'ten bir dosya yüklemek için yolun hf:// ile başlaması gerekir. Örneğin, stanfordnlp/imdb veri seti deposunun yolu hf://datasets/stanfordnlp/imdb'dir. Hugging Face'teki veri seti birden çok Parquet dosyası içerir. Parquet dosya biçimi, veri çerçevelerini okumayı ve yazmayı verimli hale getirmek ve veri analiz dilleri arasında veri paylaşımını kolaylaştırmak üzere tasarlanmıştır. plain_text/train-00000-of-00001.parquet dosyasını yüklemenin yolu aşağıdaki gibidir:

>>> import pandas as pd
>>> df = pd.read_parquet("hf://datasets/stanfordnlp/imdb/plain_text/train-00000-of-00001.parquet")
>>> df
                                                    text  label
0      I rented I AM CURIOUS-YELLOW from my video sto...      0
1      "I Am Curious: Yellow" is a risible and preten...      0
2      If only to avoid making this type of film in t...      0
3      This film was probably inspired by Godard's Ma...      0
4      Oh, brother...after hearing about this ridicul...      0
...                                                  ...    ...
24995  A hit at the time but now better categorised a...      1
24996  I love this movie like no other. Another time ...      1
24997  This film and it's sequel Barry Mckenzie holds...      1
24998  'The Adventures Of Barry McKenzie' started lif...      1
24999  The story centers around Barry McKenzie who mu...      1

Hugging Face yolları ve bunların nasıl uygulandığına dair daha fazla bilgi için lütfen HfFileSystem hakkında istemci kütüphanesinin belgelerine başvurun.

Aynı hf:// yolları Storage Buckets ile de çalışır:

>>> df = pd.read_parquet("hf://buckets/username/my-bucket/data.parquet")
>>> df.to_parquet("hf://buckets/username/my-bucket/output.parquet")

Bir DataFrame kaydet

Bir pandas DataFrame'ini to_csv/to_json/to_parquet kullanarak yerel bir dosyaya veya doğrudan Hugging Face'e kaydedebilirsiniz.

Hugging Face üzerinde DataFrame'i kaydetmek için önce Hugging Face hesabınızla oturum açmanız gerekir, örneğin şunu kullanarak:

hf auth login

Ardından bir veri seti deposu oluşturabilirsiniz, örneğin şunu kullanarak:

from huggingface_hub import HfApi

HfApi().create_repo(repo_id="username/my_dataset", repo_type="dataset")

Son olarak, Pandas'ta Hugging Face yollarını kullanabilirsiniz:

import pandas as pd

df.to_parquet("hf://datasets/username/my_dataset/imdb.parquet")

# or write in separate files if the dataset has train/validation/test splits
df_train.to_parquet("hf://datasets/username/my_dataset/train.parquet")
df_valid.to_parquet("hf://datasets/username/my_dataset/validation.parquet")
df_test .to_parquet("hf://datasets/username/my_dataset/test.parquet")

Hugging Face'taki Parquet dosyalarının, depolama verimliliğini artırmak, indirme ve yükleme işlemlerini hızlandırmak ve verimli veri seti akışını ve düzenlemeyi mümkün kılmak üzere optimize edildiğini unutmayın:

  • Parquet İçerik Tanımlı Parçalama, Hugging Face'in depolama altyapısı olan Xet için Parquet'i optimize eder. Parça tabanlı kopya azaltma sayesinde yüklemeleri ve indirmeleri hızlandırır ve verimli dosya düzenlemeye olanak tanır
  • Page index, akış sırasında filtreleri hızlandırır ve Dataset Viewer gibi durumlarda verimli rastgele erişim sağlar.

Pandas, optimize edilmiş Parquet dosyaları yazmak için ek bir argüman gerektirir:

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,
)
  • Parquet İçerik Tanımlı Parçalama'yı etkinleştirmek için use_content_defined_chunking=True kullanın; bu, ayıklama ve düzenleme için gereklidir (pyarrow>=21.0 gerektirir)
  • Parquet metaverisinde sayfa dizini içermek için write_page_index=True, akış ve rastgele erişim için

İçerik tanımlı parçalama (CDC), Parquet yazıcısının veri sayfalarını, kopya verilerin aynı şekilde parçalanıp sıkıştırılmasını sağlayacak biçimde parçalamasını sağlar. CDC olmadan, sayfalar keyfi olarak parçalanır ve bu nedenle kopya veriler, sıkıştırma nedeniyle tespit edilemez. CDC sayesinde, kopya veriler yalnızca bir kez yüklendiği veya indirildiği için Hugging Face'den Parquet yükleme ve indirme işlemleri daha hızlıdır.

Xet hakkında daha fazla bilgiyi burada bulabilirsiniz.

Parquet için Xet çakışma giderme özelliğinden yararlanın

Optimize edilmiş Parquet dosyaları, yinelenen verilerin kaldırılmasını (deduplication) mümkün kılan Content Defined Chunking ile yazılır. Bu, Hugging Face üzerinde zaten var olan veri parçacıklarının yeniden yüklenmesine gerek kalmadığı için yüklemeleri hızlandırır ve bu da çok fazla I/O tasarrufu sağlar.

Örneğin, bu kod df içeriğini yükler ve ardından edited_df için yalnızca değişen parçaları yüklediğinden yükleme daha hızlıdır:

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,
)

Parçalar ~64kB boyutundadır ve Parquet verileri sütun sütun kaydettiğinden, pratikte bir Optimize Edilmiş Parquet dosyası düzenlendiğinde şunlar gerçekleşir:

  • yeni bir sütun ekleyin -> yalnızca yeni sütunun parçaları yüklenir
  • satır ekleme/düzenleme/silme -> her sütun için bir parça yüklenir

Bunun yanı sıra, Parquet altbilgisindeki metadata içeren parçalar da yüklenir.

Görüntüler Kullanın

Bir klasör yükleyebilirsiniz; bu klasör, görsellerin adlarını veya yollarını içeren bir alanı barındıran bir meta veri dosyası içerir ve şu şekilde yapılandırılmıştır:

Example 1:            Example 2:
folder/               folder/
├── metadata.csv      ├── metadata.csv
├── img000.png        └── images
├── img001.png            ├── img000.png
...                       ...
└── imgNNN.png            └── imgNNN.png

Görsel yollarını şu şekilde döngüye alabilirsiniz:

import pandas as pd

folder_path = "path/to/folder/"
df = pd.read_csv(folder_path + "metadata.csv")
for image_path in (folder_path + df["file_name"]):
    ...

Veri seti desteklenen bir yapıda (file_name alanına sahip bir metadata.csv veya .jsonl dosyası) olduğundan, bu veri setini Hugging Face'e kaydedebilir ve Hugging Face'teki Dataset Viewer hem metadata'yı hem de görüntüleri gösterebilir.

from huggingface_hub import HfApi
api = HfApi()

api.upload_folder(
    folder_path=folder_path,
    repo_id="username/my_image_dataset",
    repo_type="dataset",
)

Görüntü yöntemleri ve Parquet

pandas-image-methods kullanarak bir görüntü sütununda PIL.Image yöntemlerini etkinleştirebilirsiniz. Ayrıca görüntüleri ve meta verileri içeren tek bir Parquet dosyası olarak veri setini kaydetmeyi de sağlar:

import pandas as pd
from pandas_image_methods import PILMethods

pd.api.extensions.register_series_accessor("pil")(PILMethods)

df["image"] = (folder_path + df["file_name"]).pil.open()
df.to_parquet("data.parquet")

Tüm PIL.Image yöntemleri kullanılabilir, örneğin

df["image"] = df["image"].pil.rotate(90)

Sesleri Kullanın

İçinde seslerin adlarını veya yollarını içeren bir alan bulunan bir metadata dosyası içeren bir klasörü şu şekilde yapılandırılmış olarak yükleyebilirsiniz:

Example 1:            Example 2:
folder/               folder/
├── metadata.csv      ├── metadata.csv
├── rec000.wav        └── audios
├── rec001.wav            ├── rec000.wav
...                       ...
└── recNNN.wav            └── recNNN.wav

Ses dosyası yollarını şu şekilde döngüye alabilirsiniz:

import pandas as pd

folder_path = "path/to/folder/"
df = pd.read_csv(folder_path + "metadata.csv")
for audio_path in (folder_path + df["file_name"]):
    ...

Veri seti desteklenen bir yapıda (file_name alanına sahip bir metadata.csv veya .jsonl dosyası) olduğundan, Hugging Face'e kaydedebilirsiniz ve Hub Veri Seti Görüntüleyici hem meta verileri hem de sesleri gösterir.

from huggingface_hub import HfApi
api = HfApi()

api.upload_folder(
    folder_path=folder_path,
    repo_id="username/my_audio_dataset",
    repo_type="dataset",
)

Ses yöntemleri ve Parquet

pandas-audio-methods kullanarak bir ses sütununda soundfile yöntemlerini etkinleştirebilirsiniz. Ayrıca, hem sesleri hem de meta verileri içeren tek bir Parquet dosyası olarak veri setini kaydetmeyi de mümkün kılar:

import pandas as pd
from pandas_audio_methods import SFMethods

pd.api.extensions.register_series_accessor("sf")(SFMethods)

df["audio"] = (folder_path + df["file_name"]).sf.open()
df.to_parquet("data.parquet")

Bu, librosa ile örneğin yeniden örneklemeye (resampling) yönelik kullanımını kolaylaştırır:

df["audio"] = [librosa.load(audio, sr=16_000) for audio in df["audio"]]
df["audio"] = df["audio"].sf.write()

Transformers Kullanın

transformers hatlarını pandas veri çerçeveleri üzerinde sınıflandırma, metin ve görsel üretimi gibi işlemler için kullanabilirsiniz. Bu bölümde, ilerleme çubukları için tqdm kullanılarak birkaç örnek gösterilmektedir.

Pipelines, girdi olarak tqdm nesnesi kabul etmez ancak bunun yerine x for x in tqdm(...) biçiminde bir python jeneratörü kullanabilirsiniz.

Metin Sınıflandırma

from transformers import pipeline
from tqdm import tqdm

pipe = pipeline("text-classification", model="clapAI/modernBERT-base-multilingual-sentiment")

# Compute labels
df["label"] = [y["label"] for y in pipe(x for x in tqdm(df["text"]))]
# Compute labels and scores
df[["label", "score"]] = [(y["label"], y["score"]) for y in pipe(x for x in tqdm(df["text"]))]

Metin Üretimi

from transformers import pipeline
from tqdm import tqdm

pipe = pipeline("text-generation", model="Qwen/Qwen2.5-1.5B-Instruct")

# Generate chat response
prompt = "What is the main topic of this sentence ? REPLY IN LESS THAN 3 WORDS. Sentence: '{}'"
df["output"] = [y["generated_text"][1]["content"] for y in pipe([{"role": "user", "content": prompt.format(x)}] for x in tqdm(df["text"]))]
Update on GitHub