Buat beberapa kolom untuk loop python

Anda dapat menggunakan

print(actual_df.explain())== Physical Plan ==
*Project [lower(name#0) AS name#5, lower(eye_color#1) AS eye_color#9]
+- Scan ExistingRDD[name#0,eye_color#1]
3,
print(actual_df.explain())== Physical Plan ==
*Project [lower(name#0) AS name#5, lower(eye_color#1) AS eye_color#9]
+- Scan ExistingRDD[name#0,eye_color#1]
4 loop, atau daftar pemahaman untuk menerapkan fungsi PySpark ke beberapa kolom dalam DataFrame

Menggunakan iterator untuk menerapkan operasi yang sama pada banyak kolom sangat penting untuk mempertahankan basis kode DRY

Mari jelajahi berbagai cara untuk menggunakan huruf kecil semua kolom dalam DataFrame untuk mengilustrasikan konsep ini

Jika Anda menggunakan Scala API, lihat posting blog ini tentang melakukan operasi pada banyak kolom di Spark DataFrame dengan foldLeft

Huruf kecil semua kolom dengan print(actual_df.explain())== Physical Plan ==*Project [lower(name#0) AS name#5, lower(eye_color#1) AS eye_color#9]+- Scan ExistingRDD[name#0,eye_color#1]3

Mari impor fungsi

print(actual_df.explain())== Physical Plan ==
*Project [lower(name#0) AS name#5, lower(eye_color#1) AS eye_color#9]
+- Scan ExistingRDD[name#0,eye_color#1]
_3 dari
print(actual_df.explain())== Physical Plan ==
*Project [lower(name#0) AS name#5, lower(eye_color#1) AS eye_color#9]
+- Scan ExistingRDD[name#0,eye_color#1]
7 dan gunakan untuk huruf kecil semua kolom dalam DataFrame

source_df = spark.createDataFrame(
[
("Jose", "BLUE"),
("lI", "BrOwN")
],
["name", "eye_color"]
)

actual_df = (reduce(
lambda memo_df, col_name: memo_df.withColumn(col_name, lower(col(col_name))),
source_df.columns,
source_df
))

print(actual_df.show())
+----+---------+
|name|eye_color|
+----+---------+
|jose| blue|
| li| brown|
+----+---------+

Rencana fisik yang dihasilkan oleh kode ini terlihat efisien

print(actual_df.explain())== Physical Plan ==
*Project [lower(name#0) AS name#5, lower(eye_color#1) AS eye_color#9]
+- Scan ExistingRDD[name#0,eye_color#1]

Bukan rahasia lagi bahwa pengurangan bukanlah salah satu fungsi yang disukai dari Pythonistas. —

Mari kita lihat bagaimana kita dapat mencapai hasil yang sama dengan

print(actual_df.explain())== Physical Plan ==
*Project [lower(name#0) AS name#5, lower(eye_color#1) AS eye_color#9]
+- Scan ExistingRDD[name#0,eye_color#1]
4 loop

Huruf kecil semua kolom dengan loop for

Mari gunakan

print(actual_df.explain())== Physical Plan ==
*Project [lower(name#0) AS name#5, lower(eye_color#1) AS eye_color#9]
+- Scan ExistingRDD[name#0,eye_color#1]
_9 yang sama seperti sebelumnya dan bangun
actual_df = source_df

for col_name in actual_df.columns:
actual_df = actual_df.withColumn(col_name, lower(col(col_name)))
0 dengan
print(actual_df.explain())== Physical Plan ==
*Project [lower(name#0) AS name#5, lower(eye_color#1) AS eye_color#9]
+- Scan ExistingRDD[name#0,eye_color#1]
4 loop

actual_df = source_df

for col_name in actual_df.columns:
actual_df = actual_df.withColumn(col_name, lower(col(col_name)))
_

Kode ini agak jelek, tetapi Spark pintar dan menghasilkan rencana fisik yang sama

print(actual_df.explain())== Physical Plan ==
*Project [lower(name#18) AS name#23, lower(eye_color#19) AS eye_color#27]
+- Scan ExistingRDD[name#18,eye_color#19]

Mari kita lihat bagaimana kita juga bisa menggunakan pemahaman daftar untuk menulis kode ini

Huruf kecil semua kolom dengan pemahaman daftar

Mari gunakan

print(actual_df.explain())== Physical Plan ==
*Project [lower(name#0) AS name#5, lower(eye_color#1) AS eye_color#9]
+- Scan ExistingRDD[name#0,eye_color#1]
_9 yang sama seperti sebelumnya dan huruf kecil semua kolom dengan pemahaman daftar yang sangat disukai oleh Pythonistas jauh dan luas

actual_df = source_df.select(
*[lower(col(col_name)).name(col_name) for col_name in source_df.columns]
)

Spark masih pintar dan menghasilkan rencana fisik yang sama

print(actual_df.explain())== Physical Plan ==
*Project [lower(name#36) AS name#41, lower(eye_color#37) AS eye_color#42]
+- Scan ExistingRDD[name#36,eye_color#37]

Mari kita gabungkan dan lihat bagaimana solusi ini bekerja saat dijalankan di beberapa, tetapi tidak semua, kolom di DataFrame

Melakukan operasi pada subset kolom DataFrame

Mari kita tentukan fungsi

actual_df = source_df

for col_name in actual_df.columns:
actual_df = actual_df.withColumn(col_name, lower(col(col_name)))
_3 yang menghapus semua tanda seru dan tanda tanya dari kolom

def remove_some_chars(col_name):
removed_chars = ("!", "?")
regexp = "|".join('\{0}'.format(i) for i in removed_chars)
return regexp_replace(col_name, regexp, "")

Mari gunakan

print(actual_df.explain())== Physical Plan ==
*Project [lower(name#0) AS name#5, lower(eye_color#1) AS eye_color#9]
+- Scan ExistingRDD[name#0,eye_color#1]
3 untuk menerapkan fungsi
actual_df = source_df

for col_name in actual_df.columns:
actual_df = actual_df.withColumn(col_name, lower(col(col_name)))
3 ke dua kolom di DataFrame baru

source_df = spark.createDataFrame(
[
("h!o!c!k!e!y", "rangers", "new york"),
("soccer", "??nacional!!", "medellin")
],
["sport", "team", "city"]
)

print(source_df.show())
+-----------+------------+--------+
| sport| team| city|
+-----------+------------+--------+
|h!o!c!k!e!y| rangers|new york|
| soccer|??nacional!!|medellin|
+-----------+------------+--------+
actual_df = (reduce(
lambda memo_df, col_name: memo_df.withColumn(col_name, remove_some_chars(col_name)),
["sport", "team"],
source_df
))

print(actual_df.show())
+------+--------+--------+
| sport| team| city|
+------+--------+--------+
|hockey| rangers|new york|
|soccer|nacional|medellin|
+------+--------+--------+

Mari kita coba membangun

actual_df = source_df

for col_name in actual_df.columns:
actual_df = actual_df.withColumn(col_name, lower(col(col_name)))
_0 dengan loop
print(actual_df.explain())== Physical Plan ==
*Project [lower(name#0) AS name#5, lower(eye_color#1) AS eye_color#9]
+- Scan ExistingRDD[name#0,eye_color#1]
4

actual_df = source_df

for col_name in ["sport", "team"]:
actual_df = actual_df.withColumn(col_name, remove_some_chars(col_name))

Loop

print(actual_df.explain())== Physical Plan ==
*Project [lower(name#0) AS name#5, lower(eye_color#1) AS eye_color#9]
+- Scan ExistingRDD[name#0,eye_color#1]
4 terlihat cukup bersih. Sekarang mari kita coba dengan pemahaman daftar

source_df.select(
*[remove_some_chars(col_name).name(col_name) if col_name in ["sport", "team"] else col_name for col_name in source_df.columns]
)

Wow, pemahaman daftarnya sangat jelek untuk subset kolom 😿

print(actual_df.explain())== Physical Plan ==
*Project [lower(name#0) AS name#5, lower(eye_color#1) AS eye_color#9]
+- Scan ExistingRDD[name#0,eye_color#1]
3,
print(actual_df.explain())== Physical Plan ==
*Project [lower(name#0) AS name#5, lower(eye_color#1) AS eye_color#9]
+- Scan ExistingRDD[name#0,eye_color#1]
4, dan pemahaman daftar semuanya menghasilkan rencana fisik yang sama seperti pada contoh sebelumnya, jadi setiap opsi memiliki performa yang sama saat dieksekusi

print(actual_df.explain())== Physical Plan ==
*Project [lower(name#0) AS name#5, lower(eye_color#1) AS eye_color#9]
+- Scan ExistingRDD[name#0,eye_color#1]
0

Pendekatan apa yang harus Anda gunakan?

print(actual_df.explain())== Physical Plan ==
*Project [lower(name#0) AS name#5, lower(eye_color#1) AS eye_color#9]
+- Scan ExistingRDD[name#0,eye_color#1]
4 loop tampaknya menghasilkan kode yang paling mudah dibaca. Pemahaman daftar dapat digunakan untuk operasi yang dilakukan pada semua kolom DataFrame, tetapi harus dihindari untuk operasi yang dilakukan pada subset kolom. Kode
print(actual_df.explain())== Physical Plan ==
*Project [lower(name#0) AS name#5, lower(eye_color#1) AS eye_color#9]
+- Scan ExistingRDD[name#0,eye_color#1]
3 juga cukup bersih, jadi itu juga merupakan alternatif yang layak

Sebaiknya tulis fungsi yang beroperasi pada satu kolom dan bungkus iterator dalam transformasi DataFrame terpisah sehingga kode dapat dengan mudah diterapkan ke beberapa kolom

Mari kita definisikan

print(actual_df.explain())== Physical Plan ==
*Project [lower(name#18) AS name#23, lower(eye_color#19) AS eye_color#27]
+- Scan ExistingRDD[name#18,eye_color#19]
_3 transformasi DataFrame yang menggunakan larik
print(actual_df.explain())== Physical Plan ==
*Project [lower(name#18) AS name#23, lower(eye_color#19) AS eye_color#27]
+- Scan ExistingRDD[name#18,eye_color#19]
4 sebagai argumen dan menerapkan
actual_df = source_df

for col_name in actual_df.columns:
actual_df = actual_df.withColumn(col_name, lower(col(col_name)))
3 ke setiap
print(actual_df.explain())== Physical Plan ==
*Project [lower(name#18) AS name#23, lower(eye_color#19) AS eye_color#27]
+- Scan ExistingRDD[name#18,eye_color#19]
6

Bagaimana cara saya mengulang beberapa kolom?

Ulangi Kolom DataFrame . Anda dapat menggunakan label-kolom untuk menjalankan loop for di atas DataFrame panda menggunakan sintaks get item ([]). Hasil di bawah output. Fungsi values() digunakan untuk mengekstrak elemen objek sebagai daftar. using for loop. You can use column-labels to run the for loop over the pandas DataFrame using the get item syntax ([]) . Yields below output. The values() function is used to extract the object elements as a list.

Bagaimana cara menambahkan kolom ke DataFrame dengan Python dalam for loop?

Langkah 1 - Impor perpustakaan. impor panda sebagai pd. .
Langkah 2 - Siapkan Data. df=pd. DataFrame({'Tabel 9'. [9,18,27], 'Tabel 10'. [10,20,30]}).
Langkah 3 - Menambahkan bingkai data dalam for loop. untuk saya dalam rentang (4,11). df=df. tambahkan({'Tabel 9'. i*9,'Tabel 10'. i*10},ignore_index=True).
Langkah 4 - Mencetak hasil. cetak('df\n',df)

Bagaimana cara menambahkan kolom ke loop di DataFrame?

Menambahkan kolom baru sebenarnya diperlukan untuk memproses data dari kerangka data yang dibuat sebelumnya. Untuk itu, kita dapat mengolah data yang ada dan membuat kolom tersendiri untuk menyimpan data tersebut. Cara termudah untuk menambahkan kolom baru beserta datanya adalah dengan membuat kolom baru dan menetapkan nilai baru padanya .

Bagaimana Anda menambahkan kolom secara dinamis dengan Python?

Buat Kolom Secara Dinamis di Pandas Dataframe .
Normalisasi Rangkaian Waktu Berjendela. .
Konversikan Semua Kolom Non-numerik ke Tipe Data Kategori. .
Membuat Kolom Total Berjalan di Pandas. .
Pivoting Bingkai Data Panda. .
Mengganti Nama Kolom dalam Bingkai Data Pandas Menggunakan Kamus dan Daftar. .
Cara Menghapus Tanda Baca Dari Teks dengan Python