read_fwf : Cara ekstrak data menggunakan posisi dalam Fail data
Ingat read_csv sudah cukup hebat
Bertemu lagi.
Ini pertama kali saya menggunakan function ini. Jika sebelum ini read_csv banyak digunakan kerana data-data dibahagikan dengan pembahagian(delimiter) yang jelas seperti tab (\t), koma(,) atau pipe ( | ) tetapi baru-baru ini saya berdepan dengan satu cabaran yang menarik: asingkan data dengan menggunakan posisi dalam string (menarik bukan?)
Contoh file seperti di bawah (nama fail: kod_produk.txt
)
9556041602065 Malaysian Tea Delight 5
9556789200102 Spicy Malaysian Curry Sauce 10
9557324000333 Penang White Coffee 199
9555123601234 Durian Flavor Candy 89%
Menurut maklumat, file ini mengikut format berikut
Column 1: Barkod produk, bermula daripada posisi 0 hingga 18
Column 2: Nama produk, bermula daripada posisi 19 hingga 52
Column 3: Jumlah produk, bermula daripada posisi 53 hingga 60
Jelas?
Tetapi mesti anda rasa takkan la read_csv tidak dapat esktrak maklumat tersebut. Mari kita cuba (jika kita sangka dengan menggunakan tapb (\t) sudah mencukupi:
import pandas as pd
# Read the fixed-width file
df = pd.read_csv('substack_data/kod_produk.txt', sep='\t', header=None)
print(df.shape)
Kod di atas akan menghasilkan dataframe shape (4,1)
. Ini menunjukkan read_csv
hanya boleh mengesan row tetapi bukan column.
Berikut adalah code yang digunakan untuk mendapatkan data daripada fail: kod_produk.txt
import pandas as pd
# Define the widths of each field
widths = [18,34,9]
# Read the fixed-width file
df = pd.read_fwf('substack_data/kod_produk.txt', widths=widths, header=None)
# Rename the columns if needed
df.columns = ['barcode', 'product_name','total_product']
#print semua row
print(df)
#print dataframe shape
print(df.shape)
Hasilnya adalah seperti berikut:
barcode product_name total_product
0 9556041602065 Malaysian Tea Delight 5
1 9556789200102 Spicy Malaysian Curry Sauce 10
2 9557324000333 Penang White Coffee 199
3 9555123601234 Durian Flavor Candy 89
(4, 3)
Jika kita perhatikan shape (4, 3)
, ini menunjukkan kod di atas dapat mengesan beberapa column berdasarkan posisi data tersebut.
Biar saya jelaskan kod di atas
# Define the widths of each field widths = [18,34,9]
Kod ini digunakan untuk menentukan panjang aksara column. Dalam contoh di atas 18 merujuk kepada jumlah aksara daripada posisi 0 hingga 18. 34 adalah jumlah jarak antara 19 hingga 52 dan begitulah seterusnya.
# Read the fixed-width file df = pd.read_fwf('substack_data/kod_produk.txt', widths=widths, header=None)
Berbezaaan di sini berbanding function read_csv
yang biasa kita gunakan adalah penggunakan function read_fwf
, dan function ini menggunakan widths untuk membahagikan data-data tersebut kepada column yang betul (dalam read_csv
kita menggunakan sep=‘;’
)
# Rename the columns if needed df.columns = ['barcode', 'product_name','total_product']
Yang ini kita gunakan untuk memberi nama column yang kepada dataframe kita.
Komen dan share ya…..