# Gunakan dengan Pandas

Dokumen ini adalah pengantar singkat tentang penggunaan `datasets` dengan Pandas, dengan fokus khusus pada cara memproses dataset menggunakan fungsi Pandas, serta cara mengonversi dataset ke Pandas atau dari Pandas.

Hal ini sangat berguna karena memungkinkan operasi yang cepat, mengingat `datasets` menggunakan PyArrow di baliknya dan PyArrow terintegrasi dengan baik dengan Pandas.

## Format dataset

Secara default, dataset mengembalikan objek Python biasa: bilangan bulat, bilangan desimal, string, daftar, dan sebagainya.

Untuk mendapatkan Pandas DataFrames atau Series sebagai gantinya, Anda dapat mengatur format dataset menjadi `pandas` menggunakan [Dataset.with_format()](/docs/datasets/v5.2.0/id/package_reference/main_classes#datasets.Dataset.with_format):

```py
>>> from datasets import Dataset
>>> data = {"col_0": ["a", "b", "c", "d"], "col_1": [0., 0., 1., 1.]}
>>> ds = Dataset.from_dict(data)
>>> ds = ds.with_format("pandas")
>>> ds[0]       # pd.DataFrame
  col_0  col_1
0     a    0.0
>>> ds[:2]      # pd.DataFrame
  col_0  col_1
0     a    0.0
1     b    0.0
>>> ds["data"]  # pd.Series
0    a
1    b
2    c
3    d
Name: col_0, dtype: object
```

Hal ini juga berlaku untuk objek `IterableDataset` yang diperoleh, misalnya, menggunakan `load_dataset(..., streaming=True)`:

```py
>>> ds = ds.with_format("pandas")
>>> for df in ds.iter(batch_size=2):
...     print(df)
...     break
  col_0  col_1
0     a    0.0
1     b    0.0
```

## Proses data

Fungsi Pandas umumnya lebih cepat daripada fungsi python yang ditulis manual, sehingga merupakan pilihan yang baik untuk mengoptimalkan pemrosesan data. Anda dapat menggunakan fungsi Pandas untuk memproses dataset di [Dataset.map()](/docs/datasets/v5.2.0/id/package_reference/main_classes#datasets.Dataset.map) atau [Dataset.filter()](/docs/datasets/v5.2.0/id/package_reference/main_classes#datasets.Dataset.filter):

```python
>>> from datasets import Dataset
>>> data = {"col_0": ["a", "b", "c", "d"], "col_1": [0., 0., 1., 1.]}
>>> ds = Dataset.from_dict(data)
>>> ds = ds.with_format("pandas")
>>> ds = ds.map(lambda df: df.assign(col_2=df.col_1 + 1), batched=True)
>>> ds[:2]
  col_0  col_1  col_2
0     a    0.0    1.0
1     b    0.0    1.0
>>> ds = ds.filter(lambda df: df.col_0 == "b", batched=True)
>>> ds[0]
  col_0  col_1  col_2
0     b    0.0    1.0
```

Kami menggunakan `batched=True` karena memproses data dalam bentuk batch di Pandas lebih cepat daripada baris per baris. Anda juga dapat menggunakan `batch_size=` di `map()` untuk mengatur ukuran setiap `df`.

Hal ini juga berlaku untuk [IterableDataset.map()](/docs/datasets/v5.2.0/id/package_reference/main_classes#datasets.IterableDataset.map) dan [IterableDataset.filter()](/docs/datasets/v5.2.0/id/package_reference/main_classes#datasets.IterableDataset.filter).

## Import atau Export dari Pandas

Untuk mengimpor data dari Pandas, Anda dapat menggunakan [Dataset.from_pandas()](/docs/datasets/v5.2.0/id/package_reference/main_classes#datasets.Dataset.from_pandas):

```python
ds = Dataset.from_pandas(df)
```

Dan Anda dapat menggunakan [Dataset.to_pandas()](/docs/datasets/v5.2.0/id/package_reference/main_classes#datasets.Dataset.to_pandas) untuk mengekspor Dataset ke Pandas DataFrame:

```python
df = Dataset.to_pandas()
```

