Saya memiliki dataframe dalam panda di mana setiap kolom memiliki rentang nilai yang berbeda. Sebagai contoh:
df:
A B C
1000 10 0.5
765 5 0.35
800 7 0.09
Adakah yang tahu bagaimana saya bisa menormalkan kolom-bingkai dataframe ini di mana setiap nilai antara 0 dan 1?
Output yang saya inginkan adalah:
A B C
1 1 1
0.765 0.5 0.7
0.8 0.7 0.18(which is 0.09/0.5)
ddof
argumennya?Jawaban:
Anda dapat menggunakan sklearn paket dan utilitas preprocessing terkait untuk menormalkan data.
Untuk informasi lebih lanjut, lihat dokumentasi scikit-learn pada data preprocessing: penskalaan fitur ke kisaran.
sumber
pd.DataFrame(min_max_scaler.fit_transform(df.T), columns=df.columns, index=df.index)
df=pandas.DataFrame(x_scaled, columns=df.columns)
satu cara mudah dengan menggunakan Panda : (di sini saya ingin menggunakan normalisasi rata-rata)
untuk menggunakan normalisasi min-max:
Sunting: Untuk mengatasi beberapa masalah, perlu dikatakan bahwa Panda secara otomatis menerapkan fungsi colomn-wise dalam kode di atas.
sumber
Berdasarkan pos ini: /stats/70801/how-to-normalize-data-to-0-1-range
Anda dapat melakukan hal berikut:
Anda tidak perlu khawatir tentang apakah nilai Anda negatif atau positif. Dan nilainya harus tersebar dengan baik antara 0 dan 1.
sumber
Masalah Anda sebenarnya adalah transformasi sederhana yang bekerja pada kolom:
Atau bahkan lebih singkat:
sumber
lambda
satu adalah yang terbaik :-)axis [...] 0 or 'index': apply function to each column
. Standarnya sebenarnyaaxis=0
jadi one-liner ini bisa ditulis lebih pendek :-) Terima kasih @tschm.Jika Anda suka menggunakan paket sklearn, Anda dapat menyimpan kolom dan nama indeks dengan menggunakan panda
loc
seperti:sumber
Sederhana itu indah:
sumber
df["A"] = (df["A"]-df["A"].min()) / (df["A"].max()-df["A"].min())
df /= df.max()
- dengan asumsi tujuannya adalah untuk menormalkan setiap kolom, secara individual.Anda dapat membuat daftar kolom yang ingin dinormalisasi
Bingkai Data Pandas Anda sekarang dinormalisasi hanya pada kolom yang Anda inginkan
Namun , jika Anda menginginkan yang sebaliknya , pilih daftar kolom yang TIDAK ingin Anda normalkan, Anda bisa membuat daftar semua kolom dan menghapus yang tidak diinginkan
sumber
Saya pikir cara yang lebih baik untuk melakukannya dalam panda adalah adil
Sunting Jika dalam bingkai data Anda ada angka negatif yang harus Anda gunakan sebagai gantinya
sumber
Solusi yang diberikan oleh Sandman dan Praveen sangat baik. Satu-satunya masalah dengan itu jika Anda memiliki variabel kategori di kolom lain dari bingkai data Anda metode ini akan membutuhkan beberapa penyesuaian.
Solusi saya untuk jenis masalah ini adalah sebagai berikut:
sumber
Contoh standardisasi berbeda dalam python.
Untuk referensi lihat artikel wikipedia ini: https://en.wikipedia.org/wiki/Unprice_estimation_of_standard_deviation
Contoh Data
Normalisasi menggunakan panda (Memberikan perkiraan tidak bias)
Ketika menormalkan kita cukup mengurangi mean dan membaginya dengan standar deviasi.
Normalisasi menggunakan sklearn (Memberikan perkiraan bias, berbeda dari panda)
Jika Anda melakukan hal yang sama dengan
sklearn
Anda akan mendapatkan hasil yang BERBEDA!Apakah perkiraan bias sklearn membuat Pembelajaran Mesin Kurang Kuat?
TIDAK.
Dokumentasi resmi sklearn.preprocessing.scale menyatakan bahwa menggunakan estimator yang bias TIDAK UNIK untuk mempengaruhi kinerja algoritma pembelajaran mesin dan kita dapat menggunakannya dengan aman.
Bagaimana dengan Scaling MinMax?
Tidak ada perhitungan Standar Deviasi dalam penskalaan MinMax. Jadi hasilnya sama di kedua panda dan scikit-belajar.
sumber
Anda mungkin ingin memiliki beberapa kolom yang dinormalisasi dan yang lainnya tidak berubah seperti beberapa tugas regresi yang label data atau kolom kategorinya tidak berubah. Jadi saya sarankan Anda cara pythonic ini (Ini kombinasi dari jawaban @shg dan @Cina):
sumber
Ini hanya matematika sederhana. Jawabannya harus sesederhana seperti di bawah ini.
sumber
Dari dokumen panda, struktur DataFrame dapat menerapkan operasi (fungsi) untuk dirinya sendiri.
Anda dapat menerapkan fungsi khusus untuk mengoperasikan DataFrame.
sumber
Fungsi berikut menghitung skor Z:
sumber
Ini adalah bagaimana Anda melakukannya dengan bijaksana menggunakan pemahaman daftar:
sumber
Anda cukup menggunakan fungsi pandas.DataFrame.transform 1 dengan cara ini:
sumber
sumber
Anda dapat melakukan ini dalam satu baris
dibutuhkan rata-rata untuk setiap kolom dan kemudian kurangi (rata-rata) dari setiap baris (rata-rata kolom tertentu hanya mengurangi dari barisnya saja) dan bagi dengan rata-rata saja. Akhirnya, yang kami dapatkan adalah kumpulan data yang dinormalisasi.
sumber
Panda melakukan normalisasi bijaksana kolom secara default. Coba kode di bawah ini.
Nilai output akan berada dalam kisaran 0 dan 1.
sumber