Bagaimanakah untuk memisahkan lajur rentetan bingkai data kepada dua lajur?
Apabila bekerja dengan data jadual, selalunya perlu memanipulasi data untuk mengekstrak cebisan maklumat tertentu. Satu tugas biasa ialah membahagikan satu lajur nilai rentetan kepada berbilang lajur, setiap satu mengandungi sebahagian daripada rentetan asal.
Masalah dan Keperluan
Andaikan kita mempunyai DataFrame dinamakan df dengan satu lajur dipanggil baris yang mengandungi nilai rentetan dalam format berikut:
row 0 00000 UNITED STATES 1 01000 ALABAMA 2 01001 Autauga County, AL 3 01003 Baldwin County, AL 4 01005 Barbour County, AL
Matlamat kami adalah untuk bahagikan lajur baris kepada dua lajur baharu: fips dan baris, dengan fips mengandungi lima aksara pertama setiap rentetan dan baris mengandungi aksara yang tinggal.
Penyelesaian menggunakan str.split()
Salah satu cara untuk memisahkan lajur baris ialah menggunakan kaedah str.split(). Kaedah ini mengambil ungkapan biasa sebagai hujah, dan ia memisahkan rentetan berdasarkan corak yang ditentukan oleh ungkapan biasa. Dalam kes kami, kami boleh menggunakan ungkapan biasa berikut:
r'(\d{5}) +'
Ungkapan biasa ini akan sepadan dengan jujukan lima digit diikuti dengan satu atau lebih ruang. Kami kemudiannya boleh menggunakan kaedah str.split() untuk memisahkan lajur baris menggunakan ungkapan biasa ini dan menetapkan senarai yang terhasil kepada lajur fips dan baris seperti berikut:
import pandas as pd # Split the 'row' column into 'fips' and 'row' columns df[['fips', 'row']] = df['row'].str.split(r'(\d{5}) +', n=1, expand=True)
Parameter expand=True ialah digunakan untuk menentukan bahawa kaedah str.split() harus mengembalikan DataFrame dengan berbilang lajur, bukannya Siri senarai.
Hasil
Selepas melaksanakan kod di atas, df DataFrame kami akan kelihatan seperti ini:
fips row 0 00000 UNITED STATES 1 01000 ALABAMA 2 01001 Autauga County, AL 3 01003 Baldwin County, AL 4 01005 Barbour County, AL
Penyelesaian Alternatif menggunakan str.extract()
Cara lain untuk memisahkan lajur baris adalah menggunakan kaedah str.extract(). Kaedah ini mengambil ungkapan biasa sebagai hujah dan ia mengembalikan DataFrame yang mengandungi padanan untuk ungkapan biasa. Dalam kes kami, kami boleh menggunakan ungkapan biasa berikut:
r'(\d{5}) +\D+'
Ungkapan biasa ini akan sepadan dengan jujukan lima digit diikuti dengan satu atau lebih bukan digit. Kami kemudiannya boleh menggunakan kaedah str.extract() untuk mengekstrak padanan bagi ungkapan biasa ini dan menetapkan DataFrame yang terhasil kepada lajur fips dan baris seperti berikut:
import pandas as pd # Split the 'row' column into 'fips' and 'row' columns df[['fips', 'row']] = df['row'].str.extract(r'(\d{5}) +\D+')
Hasil
Selepas melaksanakan kod di atas, df DataFrame kami akan kelihatan seperti ini:
fips row 0 00000 UNITED STATES 1 01000 ALABAMA 2 01001 Autauga County, AL 3 01003 Baldwin County, AL 4 01005 Barbour County, AL
Kedua-dua penyelesaian di atas akan mencapai hasil yang diingini, memisahkan lajur baris kepada lajur fips dan baris. Penyelesaian str.split() adalah lebih fleksibel dan boleh digunakan untuk memisahkan lajur berdasarkan sebarang ungkapan biasa, manakala penyelesaian str.extract() lebih mudah dan lebih mudah difahami.
Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Lajur Rentetan DataFrame Pandas kepada Dua Lajur?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!