Objek python apa yang Anda masukkan ke kerangka data?

Saat melakukan analisis data, penting untuk memastikan bahwa Anda menggunakan tipe data yang benar; . Dalam kasus panda, ini akan menyimpulkan jenis data dengan benar dalam banyak kasus dan Anda dapat melanjutkan analisis tanpa memikirkan topik lebih lanjut

Terlepas dari seberapa baik panda bekerja, pada titik tertentu dalam proses analisis data Anda, Anda mungkin perlu secara eksplisit mengonversi data dari satu jenis ke jenis lainnya. Artikel ini akan membahas tipe data dasar panda (alias

Customer Number    float64
Customer Name       object
2016                object
2017                object
Percent Growth      object
Jan Units           object
Month                int64
Day                  int64
Year                 int64
Active              object
dtype: object
0 ), bagaimana mereka memetakan ke tipe data python dan numpy dan opsi untuk mengonversi dari satu tipe panda ke tipe lainnya

Jenis Data Panda

Tipe data pada dasarnya adalah konstruksi internal yang digunakan bahasa pemrograman untuk memahami cara menyimpan dan memanipulasi data. Misalnya, sebuah program perlu memahami bahwa Anda dapat menjumlahkan dua angka seperti 5 + 10 untuk mendapatkan 15. Atau, jika Anda memiliki dua string seperti “cat” dan “hat”, Anda dapat menggabungkan (menambahkan) keduanya untuk mendapatkan “cathat. ”

Poin yang mungkin membingungkan tentang tipe data panda adalah bahwa ada beberapa tumpang tindih antara panda, python, dan numpy. Tabel ini merangkum poin-poin utama

Panda
Customer Number    float64
Customer Name       object
2016                object
2017                object
Percent Growth      object
Jan Units           object
Month                int64
Day                  int64
Year                 int64
Active              object
dtype: object
1 mappingPandas dtypePython typeNumPy typeUsageobjectstr or mixedstring_, unicode_, mixed typesText or mixed numeric and non-numeric valuesint64intint_, int8, int16, int32, int64, uint8, uint16, uint32, uint64Integer angkafloat64floatfloat_, float3float_, float16 NAdatetime64[ns]Date and time valuestimedelta[ns]NANADifferences between two datetimescategoryNANAFinite list of text values

Untuk sebagian besar, tidak perlu khawatir tentang menentukan apakah Anda harus mencoba memaksa tipe pandas secara eksplisit ke tipe NumPy yang sesuai. Sebagian besar waktu, menggunakan tipe panda default

Customer Number    float64
Customer Name       object
2016                object
2017                object
Percent Growth      object
Jan Units           object
Month                int64
Day                  int64
Year                 int64
Active              object
dtype: object
2 dan
Customer Number    float64
Customer Name       object
2016                object
2017                object
Percent Growth      object
Jan Units           object
Month                int64
Day                  int64
Year                 int64
Active              object
dtype: object
3 akan berfungsi. Satu-satunya alasan yang saya sertakan dalam tabel ini adalah terkadang Anda mungkin melihat jenis numpy muncul secara online atau dalam analisis Anda sendiri

Untuk artikel ini, saya akan fokus pada jenis panda berikut

  • Customer Number    float64
    Customer Name       object
    2016                object
    2017                object
    Percent Growth      object
    Jan Units           object
    Month                int64
    Day                  int64
    Year                 int64
    Active              object
    dtype: object
    
    _4
  • Customer Number    float64
    Customer Name       object
    2016                object
    2017                object
    Percent Growth      object
    Jan Units           object
    Month                int64
    Day                  int64
    Year                 int64
    Active              object
    dtype: object
    
    _2
  • Customer Number    float64
    Customer Name       object
    2016                object
    2017                object
    Percent Growth      object
    Jan Units           object
    Month                int64
    Day                  int64
    Year                 int64
    Active              object
    dtype: object
    
    _3
  • Customer Number    float64
    Customer Name       object
    2016                object
    2017                object
    Percent Growth      object
    Jan Units           object
    Month                int64
    Day                  int64
    Year                 int64
    Active              object
    dtype: object
    
    _7
  • Customer Number    float64
    Customer Name       object
    2016                object
    2017                object
    Percent Growth      object
    Jan Units           object
    Month                int64
    Day                  int64
    Year                 int64
    Active              object
    dtype: object
    
    _8

Jenis

Customer Number    float64
Customer Name       object
2016                object
2017                object
Percent Growth      object
Jan Units           object
Month                int64
Day                  int64
Year                 int64
Active              object
dtype: object
9 dan
df.info()
0 lebih baik disajikan dalam artikel mereka sendiri jika ada minat. Namun, pendekatan dasar yang diuraikan dalam artikel ini juga berlaku untuk jenis ini

Satu item lain yang ingin saya soroti adalah bahwa tipe data

Customer Number    float64
Customer Name       object
2016                object
2017                object
Percent Growth      object
Jan Units           object
Month                int64
Day                  int64
Year                 int64
Active              object
dtype: object
4 sebenarnya dapat berisi beberapa tipe berbeda. Misalnya, kolom a dapat menyertakan bilangan bulat, pelampung, dan string yang secara kolektif diberi label sebagai
Customer Number    float64
Customer Name       object
2016                object
2017                object
Percent Growth      object
Jan Units           object
Month                int64
Day                  int64
Year                 int64
Active              object
dtype: object
4. Oleh karena itu, Anda mungkin memerlukan beberapa teknik tambahan untuk menangani tipe data campuran di
Customer Number    float64
Customer Name       object
2016                object
2017                object
Percent Growth      object
Jan Units           object
Month                int64
Day                  int64
Year                 int64
Active              object
dtype: object
4 kolom. Lihat artikel ini untuk contoh perluasan pembersihan mata uang yang dijelaskan di bawah

Mengapa kami peduli?

Tipe data adalah salah satu hal yang cenderung tidak Anda pedulikan sampai Anda mendapatkan kesalahan atau beberapa hasil yang tidak terduga. Ini juga salah satu hal pertama yang harus Anda periksa setelah memuat data baru ke dalam panda untuk analisis lebih lanjut

Saya akan menggunakan file CSV yang sangat sederhana untuk mengilustrasikan beberapa kesalahan umum yang mungkin Anda lihat di panda jika tipe datanya tidak benar. Selain itu, contoh notebook tersedia di github.

import numpy as np
import pandas as pd

df = pd.read_csv("sales_data_types.csv")

Nomor PelangganNama Pelanggan20162017Persen PertumbuhanJan UnitBulanHariTahunAktif010002. 0Quest Industries$125.000. 00$162500. 0030. 00%5001102015Y1552278. 0Smith Plumbing$920.000. 00$101,2000. 0010. 00%7006152014Y223477. 0 ACME Industri$50.000. 00$62500. 0025. 00%1253292016Y324900. 0Brekke LTD $350.000. 00$490000. 004. 00%7510272015Y4651029. 0Pelabuhan Co$15.000. 00$12750. 00-15. 00%Tutup222014N

Sekilas, data terlihat baik-baik saja sehingga kami dapat mencoba melakukan beberapa operasi untuk menganalisis data. Mari kita coba menjumlahkan penjualan tahun 2016 dan 2017

df['2016'] + df['2017']

0      $125,000.00$162500.00
1    $920,000.00$101,2000.00
2        $50,000.00$62500.00
3      $350,000.00$490000.00
4        $15,000.00$12750.00
dtype: object

Ini tidak terlihat benar. Kami ingin mendapatkan total yang ditambahkan bersama tetapi panda hanya menggabungkan dua nilai bersama untuk membuat satu string panjang. Petunjuk untuk soal tersebut adalah baris yang menyatakan

df.info()
4 An
Customer Number    float64
Customer Name       object
2016                object
2017                object
Percent Growth      object
Jan Units           object
Month                int64
Day                  int64
Year                 int64
Active              object
dtype: object
4 adalah string dalam panda sehingga ia melakukan operasi string, bukan operasi matematika

Jika kita ingin melihat semua tipe data dalam kerangka data, gunakan

df.info()
6

df.dtypes

Customer Number    float64
Customer Name       object
2016                object
2017                object
Percent Growth      object
Jan Units           object
Month                int64
Day                  int64
Year                 int64
Active              object
dtype: object

Selain itu, fungsi

df.info()
_7 menampilkan info yang lebih berguna

df.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 10 columns):
Customer Number    5 non-null float64
Customer Name      5 non-null object
2016               5 non-null object
2017               5 non-null object
Percent Growth     5 non-null object
Jan Units          5 non-null object
Month              5 non-null int64
Day                5 non-null int64
Year               5 non-null int64
Active             5 non-null object
dtypes: float64(1), int64(3), object(6)
memory usage: 480.0+ bytes

Setelah melihat jenis data yang ditetapkan secara otomatis, ada beberapa kekhawatiran

  • df.info()
    
    _8 adalah
    Customer Number    float64
    Customer Name       object
    2016                object
    2017                object
    Percent Growth      object
    Jan Units           object
    Month                int64
    Day                  int64
    Year                 int64
    Active              object
    dtype: object
    
    3 tetapi seharusnya
    Customer Number    float64
    Customer Name       object
    2016                object
    2017                object
    Percent Growth      object
    Jan Units           object
    Month                int64
    Day                  int64
    Year                 int64
    Active              object
    dtype: object
    
    2
  • Kolom
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 5 entries, 0 to 4
    Data columns (total 10 columns):
    Customer Number    5 non-null float64
    Customer Name      5 non-null object
    2016               5 non-null object
    2017               5 non-null object
    Percent Growth     5 non-null object
    Jan Units          5 non-null object
    Month              5 non-null int64
    Day                5 non-null int64
    Year               5 non-null int64
    Active             5 non-null object
    dtypes: float64(1), int64(3), object(6)
    memory usage: 480.0+ bytes
    
    1 dan
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 5 entries, 0 to 4
    Data columns (total 10 columns):
    Customer Number    5 non-null float64
    Customer Name      5 non-null object
    2016               5 non-null object
    2017               5 non-null object
    Percent Growth     5 non-null object
    Jan Units          5 non-null object
    Month              5 non-null int64
    Day                5 non-null int64
    Year               5 non-null int64
    Active             5 non-null object
    dtypes: float64(1), int64(3), object(6)
    memory usage: 480.0+ bytes
    
    2 disimpan sebagai objek, bukan nilai numerik seperti
    Customer Number    float64
    Customer Name       object
    2016                object
    2017                object
    Percent Growth      object
    Jan Units           object
    Month                int64
    Day                  int64
    Year                 int64
    Active              object
    dtype: object
    
    3 atau
    Customer Number    float64
    Customer Name       object
    2016                object
    2017                object
    Percent Growth      object
    Jan Units           object
    Month                int64
    Day                  int64
    Year                 int64
    Active              object
    dtype: object
    
    2
  • <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 5 entries, 0 to 4
    Data columns (total 10 columns):
    Customer Number    5 non-null float64
    Customer Name      5 non-null object
    2016               5 non-null object
    2017               5 non-null object
    Percent Growth     5 non-null object
    Jan Units          5 non-null object
    Month              5 non-null int64
    Day                5 non-null int64
    Year               5 non-null int64
    Active             5 non-null object
    dtypes: float64(1), int64(3), object(6)
    memory usage: 480.0+ bytes
    
    5 dan
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 5 entries, 0 to 4
    Data columns (total 10 columns):
    Customer Number    5 non-null float64
    Customer Name      5 non-null object
    2016               5 non-null object
    2017               5 non-null object
    Percent Growth     5 non-null object
    Jan Units          5 non-null object
    Month              5 non-null int64
    Day                5 non-null int64
    Year               5 non-null int64
    Active             5 non-null object
    dtypes: float64(1), int64(3), object(6)
    memory usage: 480.0+ bytes
    
    6 juga disimpan sebagai objek bukan nilai numerik
  • Kami memiliki
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 5 entries, 0 to 4
    Data columns (total 10 columns):
    Customer Number    5 non-null float64
    Customer Name      5 non-null object
    2016               5 non-null object
    2017               5 non-null object
    Percent Growth     5 non-null object
    Jan Units          5 non-null object
    Month              5 non-null int64
    Day                5 non-null int64
    Year               5 non-null int64
    Active             5 non-null object
    dtypes: float64(1), int64(3), object(6)
    memory usage: 480.0+ bytes
    
    7 ,
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 5 entries, 0 to 4
    Data columns (total 10 columns):
    Customer Number    5 non-null float64
    Customer Name      5 non-null object
    2016               5 non-null object
    2017               5 non-null object
    Percent Growth     5 non-null object
    Jan Units          5 non-null object
    Month              5 non-null int64
    Day                5 non-null int64
    Year               5 non-null int64
    Active             5 non-null object
    dtypes: float64(1), int64(3), object(6)
    memory usage: 480.0+ bytes
    
    8 dan
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 5 entries, 0 to 4
    Data columns (total 10 columns):
    Customer Number    5 non-null float64
    Customer Name      5 non-null object
    2016               5 non-null object
    2017               5 non-null object
    Percent Growth     5 non-null object
    Jan Units          5 non-null object
    Month              5 non-null int64
    Day                5 non-null int64
    Year               5 non-null int64
    Active             5 non-null object
    dtypes: float64(1), int64(3), object(6)
    memory usage: 480.0+ bytes
    
    9 kolom yang harus diubah menjadi
    Customer Number    float64
    Customer Name       object
    2016                object
    2017                object
    Percent Growth      object
    Jan Units           object
    Month                int64
    Day                  int64
    Year                 int64
    Active              object
    dtype: object
    
    7
  • Kolom
    df['Customer Number'].astype('int')
    
    _1 harus berupa boolean

Sebelum kami membersihkan jenis data ini, akan sangat sulit untuk melakukan banyak analisis tambahan pada data ini

Untuk mengonversi jenis data di panda, ada tiga opsi dasar

  • Gunakan
    df['Customer Number'].astype('int')
    
    2 untuk memaksa
    Customer Number    float64
    Customer Name       object
    2016                object
    2017                object
    Percent Growth      object
    Jan Units           object
    Month                int64
    Day                  int64
    Year                 int64
    Active              object
    dtype: object
    
    1 yang sesuai
  • Buat fungsi kustom untuk mengonversi data
  • Gunakan fungsi panda seperti
    df['Customer Number'].astype('int')
    
    _4 atau
    df['Customer Number'].astype('int')
    
    5

Menggunakan fungsi df['Customer Number'].astype('int') _2

Cara paling sederhana untuk mengonversi kolom data panda ke tipe yang berbeda adalah dengan menggunakan

df['Customer Number'].astype('int')
2. Misalnya, untuk mengonversi
df.info()
_8 menjadi bilangan bulat, kita dapat menyebutnya seperti ini

df['Customer Number'].astype('int')

0     10002
1    552278
2     23477
3     24900
4    651029
Name: Customer Number, dtype: int64

Untuk benar-benar mengubah nomor pelanggan dalam kerangka data asli, pastikan untuk menetapkannya kembali karena fungsi

df['Customer Number'].astype('int')
2 mengembalikan salinan

df["Customer Number"] = df['Customer Number'].astype('int')
df.dtypes

df['2016'] + df['2017']
0

Dan inilah bingkai data baru dengan Nomor Pelanggan sebagai bilangan bulat

Nomor PelangganNama Pelanggan20162017Persen PertumbuhanJan UnitBulanHariTahunAktif010002Quest Industries$125.000. 00$162500. 0030. 00%5001102015Y1552278Smith Plumbing$920,000. 00$101,2000. 0010. 00%7006152014Y223477 ACME Industri$50.000. 00$62500. 0025. 00%1253292016Y324900Brekke LTD $350.000. 00$490000. 004. 00%7510272015Y4651029Pelabuhan Co$15.000. 00$12750. 00-15. 00%Tutup222014N

Ini semua terlihat bagus dan tampaknya cukup sederhana. Mari coba lakukan hal yang sama pada kolom

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 10 columns):
Customer Number    5 non-null float64
Customer Name      5 non-null object
2016               5 non-null object
2017               5 non-null object
Percent Growth     5 non-null object
Jan Units          5 non-null object
Month              5 non-null int64
Day                5 non-null int64
Year               5 non-null int64
Active             5 non-null object
dtypes: float64(1), int64(3), object(6)
memory usage: 480.0+ bytes
1 kita dan ubah menjadi angka floating point

df['2016'] + df['2017']
1

df['2016'] + df['2017']
2

Dengan cara yang sama, kita dapat mencoba mengonversi kolom

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 10 columns):
Customer Number    5 non-null float64
Customer Name      5 non-null object
2016               5 non-null object
2017               5 non-null object
Percent Growth     5 non-null object
Jan Units          5 non-null object
Month              5 non-null int64
Day                5 non-null int64
Year               5 non-null int64
Active             5 non-null object
dtypes: float64(1), int64(3), object(6)
memory usage: 480.0+ bytes
6 menjadi bilangan bulat

df['2016'] + df['2017']
_3

df['2016'] + df['2017']
4

Keduanya mengembalikan

0     10002
1    552278
2     23477
3     24900
4    651029
Name: Customer Number, dtype: int64
2 pengecualian yang berarti bahwa konversi tidak berhasil

Dalam setiap kasus, data menyertakan nilai yang tidak dapat diinterpretasikan sebagai angka. Di kolom penjualan, data menyertakan simbol mata uang serta koma di setiap nilai. Di kolom

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 10 columns):
Customer Number    5 non-null float64
Customer Name      5 non-null object
2016               5 non-null object
2017               5 non-null object
Percent Growth     5 non-null object
Jan Units          5 non-null object
Month              5 non-null int64
Day                5 non-null int64
Year               5 non-null int64
Active             5 non-null object
dtypes: float64(1), int64(3), object(6)
memory usage: 480.0+ bytes
_6 nilai terakhir adalah "Tertutup" yang bukan angka;

Sejauh ini tidak terlihat bagus untuk

df['Customer Number'].astype('int')
2 sebagai alat. Kita harus mencobanya sekali lagi pada kolom
df['Customer Number'].astype('int')
1

df['2016'] + df['2017']
5

df['2016'] + df['2017']
6

Sepintas, ini terlihat baik-baik saja tetapi setelah diperiksa lebih dekat, ada masalah besar. Semua nilai ditafsirkan sebagai

0     10002
1    552278
2     23477
3     24900
4    651029
Name: Customer Number, dtype: int64
_6 tetapi pelanggan terakhir memiliki bendera Aktif
0     10002
1    552278
2     23477
3     24900
4    651029
Name: Customer Number, dtype: int64
7 jadi sepertinya ini tidak benar

Kesimpulan dari bagian ini adalah bahwa

df['Customer Number'].astype('int')
2 hanya akan berfungsi jika

  • datanya bersih dan dapat dengan mudah diartikan sebagai angka
  • Anda ingin mengonversi nilai numerik menjadi objek string

Jika data memiliki karakter non-numerik atau tidak homogen, maka

df['Customer Number'].astype('int')
2 tidak akan menjadi pilihan yang baik untuk konversi jenis. Anda perlu melakukan transformasi tambahan agar perubahan jenis berfungsi dengan benar

Fungsi Konversi Khusus

Karena data ini sedikit lebih rumit untuk dikonversi, kita dapat membuat fungsi kustom yang diterapkan ke setiap nilai dan mengonversinya ke jenis data yang sesuai

Untuk konversi mata uang (dari kumpulan data khusus ini), berikut adalah fungsi sederhana yang dapat kita gunakan

df['2016'] + df['2017']
7

Kode menggunakan fungsi string python untuk menghapus '$" dan ',' dan kemudian mengonversi nilainya menjadi angka floating point. Dalam kasus khusus ini, kita juga dapat mengonversi nilai menjadi bilangan bulat, tetapi saya memilih untuk menggunakan floating point dalam kasus ini

Saya juga curiga seseorang akan merekomendasikan agar kami menggunakan jenis

df["Customer Number"] = df['Customer Number'].astype('int')
df.dtypes
0 untuk mata uang. Ini bukan tipe data asli di panda, jadi saya sengaja tetap menggunakan pendekatan float

Yang juga perlu diperhatikan, adalah bahwa fungsi mengubah angka menjadi python

df["Customer Number"] = df['Customer Number'].astype('int')
df.dtypes
1 tetapi panda secara internal mengubahnya menjadi
df["Customer Number"] = df['Customer Number'].astype('int')
df.dtypes
2 Seperti yang disebutkan sebelumnya, saya sarankan Anda mengizinkan panda untuk mengonversi ke ukuran tertentu
df["Customer Number"] = df['Customer Number'].astype('int')
df.dtypes
1 atau
df["Customer Number"] = df['Customer Number'].astype('int')
df.dtypes
4 sesuai. Anda tidak perlu mencoba men-downcast ke ukuran byte yang lebih kecil atau upcast ke ukuran byte yang lebih besar kecuali Anda benar-benar tahu mengapa Anda perlu melakukannya

Sekarang, kita dapat menggunakan fungsi pandas

df["Customer Number"] = df['Customer Number'].astype('int')
df.dtypes
_5 untuk menerapkan ini ke semua nilai di kolom 2016

df['2016'] + df['2017']
8

df['2016'] + df['2017']
_9

Kesuksesan. Semua nilai ditampilkan sebagai

Customer Number    float64
Customer Name       object
2016                object
2017                object
Percent Growth      object
Jan Units           object
Month                int64
Day                  int64
Year                 int64
Active              object
dtype: object
_3 sehingga kita dapat melakukan semua fungsi matematika yang kita perlukan

Saya yakin pembaca yang lebih berpengalaman bertanya mengapa saya tidak menggunakan fungsi lambda saja?

0      $125,000.00$162500.00
1    $920,000.00$101,2000.00
2        $50,000.00$62500.00
3      $350,000.00$490000.00
4        $15,000.00$12750.00
dtype: object
_0

Menggunakan

df["Customer Number"] = df['Customer Number'].astype('int')
df.dtypes
_7 kita dapat merampingkan kode menjadi 1 baris yang merupakan pendekatan yang benar-benar valid. Saya memiliki tiga masalah utama dengan pendekatan ini

  • Jika Anda baru belajar python/panda atau jika seseorang yang baru mengenal python akan memelihara kode, saya pikir fungsi yang lebih panjang lebih mudah dibaca. Alasan utamanya adalah menyertakan komentar dan dapat dipecah menjadi beberapa langkah.
    df["Customer Number"] = df['Customer Number'].astype('int')
    df.dtypes
    
    _7 fungsi sedikit lebih sulit untuk dipahami pengguna baru
  • Kedua, jika Anda akan menggunakan fungsi ini di banyak kolom, saya memilih untuk tidak menduplikasi fungsi long lambda
  • Terakhir, menggunakan fungsi memudahkan untuk membersihkan data saat menggunakan
    df['2016'] + df['2017']
    
    00 Saya akan membahas penggunaan di akhir artikel

Beberapa mungkin juga berpendapat bahwa pendekatan berbasis lambda lainnya memiliki peningkatan kinerja dibandingkan fungsi kustom. Itu mungkin benar, tetapi untuk tujuan mengajar pengguna baru, menurut saya pendekatan fungsi lebih disukai

Berikut contoh lengkap mengonversi data di kedua kolom penjualan menggunakan fungsi

df['2016'] + df['2017']
01

0      $125,000.00$162500.00
1    $920,000.00$101,2000.00
2        $50,000.00$62500.00
3      $350,000.00$490000.00
4        $15,000.00$12750.00
dtype: object
_1

0      $125,000.00$162500.00
1    $920,000.00$101,2000.00
2        $50,000.00$62500.00
3      $350,000.00$490000.00
4        $15,000.00$12750.00
dtype: object
_2

Untuk contoh lain menggunakan

df["Customer Number"] = df['Customer Number'].astype('int')
df.dtypes
_7 vs. sebuah fungsi, kita dapat melihat proses untuk memperbaiki kolom
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 10 columns):
Customer Number    5 non-null float64
Customer Name      5 non-null object
2016               5 non-null object
2017               5 non-null object
Percent Growth     5 non-null object
Jan Units          5 non-null object
Month              5 non-null int64
Day                5 non-null int64
Year               5 non-null int64
Active             5 non-null object
dtypes: float64(1), int64(3), object(6)
memory usage: 480.0+ bytes
5

Menggunakan

df["Customer Number"] = df['Customer Number'].astype('int')
df.dtypes
_7

0      $125,000.00$162500.00
1    $920,000.00$101,2000.00
2        $50,000.00$62500.00
3      $350,000.00$490000.00
4        $15,000.00$12750.00
dtype: object
_3

Melakukan hal yang sama dengan fungsi kustom

0      $125,000.00$162500.00
1    $920,000.00$101,2000.00
2        $50,000.00$62500.00
3      $350,000.00$490000.00
4        $15,000.00$12750.00
dtype: object
_4

Keduanya menghasilkan nilai yang sama

0      $125,000.00$162500.00
1    $920,000.00$101,2000.00
2        $50,000.00$62500.00
3      $350,000.00$490000.00
4        $15,000.00$12750.00
dtype: object
_5

Fungsi kustom terakhir yang akan saya bahas adalah menggunakan

df['2016'] + df['2017']
05 untuk mengonversi kolom aktif menjadi boolean. Ada beberapa cara yang mungkin untuk memecahkan masalah khusus ini. Pendekatan
df['2016'] + df['2017']
_05 berguna untuk berbagai jenis masalah, jadi saya memilih untuk memasukkannya di sini

Ide dasarnya adalah menggunakan fungsi

df['2016'] + df['2017']
_05 untuk mengonversi semua nilai “Y” menjadi
0     10002
1    552278
2     23477
3     24900
4    651029
Name: Customer Number, dtype: int64
6 dan semua yang lain yang ditetapkan
df['2016'] + df['2017']
09

0      $125,000.00$162500.00
1    $920,000.00$101,2000.00
2        $50,000.00$62500.00
3      $350,000.00$490000.00
4        $15,000.00$12750.00
dtype: object
_6

Yang menghasilkan kerangka data berikut

Nomor PelangganNama Pelanggan20162017Persen PertumbuhanJan UnitBulanHariTahunAktif010002. 0Quest Industries$125.000. 00$162500. 0030. 00%5001102015Benar1552278. 0Smith Plumbing$920.000. 00$101,2000. 0010. 00%7006152014Benar223477. 0 ACME Industri$50.000. 00$62500. 0025. 00%1253292016Benar324900. 0Brekke LTD $350.000. 00$490000. 004. 00%7510272015Benar4651029. 0Pelabuhan Co$15.000. 00$12750. 00-15. 00%Tertutup222014Salah

dtype diatur dengan tepat ke

Customer Number    float64
Customer Name       object
2016                object
2017                object
Percent Growth      object
Jan Units           object
Month                int64
Day                  int64
Year                 int64
Active              object
dtype: object
8

df.dtypes

0      $125,000.00$162500.00
1    $920,000.00$101,2000.00
2        $50,000.00$62500.00
3      $350,000.00$490000.00
4        $15,000.00$12750.00
dtype: object
_8

Apakah Anda memilih untuk menggunakan fungsi

df["Customer Number"] = df['Customer Number'].astype('int')
df.dtypes
7, membuat fungsi python yang lebih standar, atau menggunakan pendekatan lain seperti
df['2016'] + df['2017']
05 , pendekatan ini sangat fleksibel dan dapat disesuaikan untuk kebutuhan data unik Anda sendiri

Fungsi pembantu panda

Panda memiliki jalan tengah antara fungsi tumpul

df['Customer Number'].astype('int')
2 dan fungsi kustom yang lebih kompleks. Fungsi pembantu ini bisa sangat berguna untuk konversi jenis data tertentu

Jika Anda telah mengikuti, Anda akan melihat bahwa saya belum melakukan apa pun dengan kolom tanggal atau kolom

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 10 columns):
Customer Number    5 non-null float64
Customer Name      5 non-null object
2016               5 non-null object
2017               5 non-null object
Percent Growth     5 non-null object
Jan Units          5 non-null object
Month              5 non-null int64
Day                5 non-null int64
Year               5 non-null int64
Active             5 non-null object
dtypes: float64(1), int64(3), object(6)
memory usage: 480.0+ bytes
6. Keduanya dapat dikonversi hanya dengan menggunakan fungsi panda bawaan seperti
df['2016'] + df['2017']
15 dan
df['2016'] + df['2017']
16

Alasan konversi

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 10 columns):
Customer Number    5 non-null float64
Customer Name      5 non-null object
2016               5 non-null object
2017               5 non-null object
Percent Growth     5 non-null object
Jan Units          5 non-null object
Month              5 non-null int64
Day                5 non-null int64
Year               5 non-null int64
Active             5 non-null object
dtypes: float64(1), int64(3), object(6)
memory usage: 480.0+ bytes
_6 bermasalah adalah penyertaan nilai non-numerik di kolom. Jika kami mencoba menggunakan
df['Customer Number'].astype('int')
_2 kami akan mendapatkan kesalahan (seperti yang dijelaskan sebelumnya). Fungsi
df['2016'] + df['2017']
_15 dapat menangani nilai-nilai ini dengan lebih baik

0      $125,000.00$162500.00
1    $920,000.00$101,2000.00
2        $50,000.00$62500.00
3      $350,000.00$490000.00
4        $15,000.00$12750.00
dtype: object
_9

df.dtypes
0

Ada beberapa item catatan. Pertama, fungsi dengan mudah memproses data dan membuat kolom

Customer Number    float64
Customer Name       object
2016                object
2017                object
Percent Growth      object
Jan Units           object
Month                int64
Day                  int64
Year                 int64
Active              object
dtype: object
3. Selain itu, ini menggantikan nilai "Tertutup" yang tidak valid dengan nilai
df['2016'] + df['2017']
21 karena kami melewati
df['2016'] + df['2017']
22. Kita dapat meninggalkan nilai itu di sana atau mengisinya dengan 0 menggunakan
df['2016'] + df['2017']
23

df.dtypes
1

df.dtypes
2

Konversi terakhir yang akan saya bahas adalah mengonversi kolom bulan, hari, dan tahun yang terpisah menjadi

df['2016'] + df['2017']
24. Fungsi panda
df['2016'] + df['2017']
16 cukup dapat dikonfigurasi tetapi juga cukup cerdas secara default

df.dtypes
3

df.dtypes
4

Dalam hal ini, fungsi menggabungkan kolom menjadi rangkaian baru dengan tipe

df['2016'] + df['2017']
26 yang sesuai

Kita perlu memastikan untuk menetapkan nilai ini kembali ke kerangka data

df.dtypes
5

Nomor PelangganNama Pelanggan20162017Persen PertumbuhanJan UnitBulanHariTahunAktifMulai_Tanggal010002Quest Industries125000. 0162500. 00. 30500. 01102015Benar2015-01-101552278Smith Plumbing920000. 01012000. 00. 10700. 06152014Benar2014-06-15223477 ACME Industrial50000. 062500. 00. 25125. 03292016Benar2016-03-29324900Brekke LTD 350000. 0490000. 00. 0475. 010272015Benar2015-10-274651029Pelabuhan Co15000. 012750. 0-0. 15NaN222014False2014-02-02

Sekarang data dikonversi dengan benar ke semua jenis yang kita perlukan

df.dtypes

df.dtypes
7

Kerangka data siap untuk dianalisis

Menyatukan semuanya

Konsep dasar penggunaan

df['Customer Number'].astype('int')
_2 dan fungsi kustom dapat dimasukkan sangat awal dalam proses pengambilan data. Jika Anda memiliki file data yang ingin Anda proses berulang kali dan formatnya selalu sama, Anda dapat menentukan
Customer Number    float64
Customer Name       object
2016                object
2017                object
Percent Growth      object
Jan Units           object
Month                int64
Day                  int64
Year                 int64
Active              object
dtype: object
1 dan
df['2016'] + df['2017']
29 untuk diterapkan saat membaca data. Sangat membantu untuk memikirkan
Customer Number    float64
Customer Name       object
2016                object
2017                object
Percent Growth      object
Jan Units           object
Month                int64
Day                  int64
Year                 int64
Active              object
dtype: object
_1 sebagai melakukan
df['Customer Number'].astype('int')
2 pada data. Argumen
df['2016'] + df['2017']
_29 memungkinkan Anda menerapkan fungsi ke berbagai kolom input yang serupa dengan pendekatan yang diuraikan di atas

Penting untuk dicatat bahwa Anda hanya dapat menerapkan fungsi

Customer Number    float64
Customer Name       object
2016                object
2017                object
Percent Growth      object
Jan Units           object
Month                int64
Day                  int64
Year                 int64
Active              object
dtype: object
1 atau
df['2016'] + df['2017']
34 ke kolom tertentu setelah menggunakan pendekatan ini. Jika Anda mencoba menerapkan keduanya pada kolom yang sama, dtype akan dilewati

Berikut adalah contoh sederhana yang melakukan hampir semua konversi pada saat data dibaca ke dalam kerangka data

df.dtypes
8

df.dtypes
_9

Seperti disebutkan sebelumnya, saya memilih untuk menyertakan

df["Customer Number"] = df['Customer Number'].astype('int')
df.dtypes
7 contoh serta contoh fungsi untuk mengkonversi data. Satu-satunya fungsi yang tidak dapat diterapkan di sini adalah konversi
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 10 columns):
Customer Number    5 non-null float64
Customer Name      5 non-null object
2016               5 non-null object
2017               5 non-null object
Percent Growth     5 non-null object
Jan Units          5 non-null object
Month              5 non-null int64
Day                5 non-null int64
Year               5 non-null int64
Active             5 non-null object
dtypes: float64(1), int64(3), object(6)
memory usage: 480.0+ bytes
7 ,
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 10 columns):
Customer Number    5 non-null float64
Customer Name      5 non-null object
2016               5 non-null object
2017               5 non-null object
Percent Growth     5 non-null object
Jan Units          5 non-null object
Month              5 non-null int64
Day                5 non-null int64
Year               5 non-null int64
Active             5 non-null object
dtypes: float64(1), int64(3), object(6)
memory usage: 480.0+ bytes
8 dan
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 10 columns):
Customer Number    5 non-null float64
Customer Name      5 non-null object
2016               5 non-null object
2017               5 non-null object
Percent Growth     5 non-null object
Jan Units          5 non-null object
Month              5 non-null int64
Day                5 non-null int64
Year               5 non-null int64
Active             5 non-null object
dtypes: float64(1), int64(3), object(6)
memory usage: 480.0+ bytes
9 kolom ke kolom
df['2016'] + df['2017']
24 yang sesuai. Namun, ini adalah konvensi andal yang dapat membantu menyempurnakan pipeline pemrosesan data Anda

Ringkasan

Salah satu langkah pertama saat menjelajahi kumpulan data baru adalah memastikan tipe data disetel dengan benar. Panda sering membuat kesimpulan yang masuk akal, tetapi ada cukup kehalusan dalam kumpulan data sehingga penting untuk mengetahui cara menggunakan berbagai opsi konversi data yang tersedia di panda. Jika Anda memiliki kiat lain yang telah Anda gunakan atau jika ada minat untuk menjelajahi jenis data

Customer Number    float64
Customer Name       object
2016                object
2017                object
Percent Growth      object
Jan Units           object
Month                int64
Day                  int64
Year                 int64
Active              object
dtype: object
9, jangan ragu untuk berkomentar di bawah

Bagaimana Anda mengubah objek menjadi DataFrame dengan Python?

Konversi Daftar ke DataFrame dengan Python .
2) Menggunakan daftar dengan nama indeks dan kolom. Kita dapat membuat bingkai data dengan memberi nama pada kolom dan mengindeks baris. .
3) Menggunakan fungsi zip(). .
4) Membuat dari daftar multi-dimensi. .
5) Menggunakan daftar multidimensi dengan nama kolom. .
6) Menggunakan daftar dalam kamus

Apa cara yang tepat untuk memuat file CSV menggunakan panda?

Panda Baca CSV .
Muat CSV ke dalam DataFrame. impor panda sebagai pd. df = pd. baca_csv('data. csv').
Cetak DataFrame tanpa metode to_string(). impor panda sebagai pd. .
Periksa jumlah baris maksimum yang dikembalikan. impor panda sebagai pd. .
Tingkatkan jumlah maksimum baris untuk menampilkan seluruh DataFrame. impor panda sebagai pd

Apa itu objek Dtype di DataFrame?

DataFrame - properti dtypes . Ini mengembalikan Seri dengan tipe data dari setiap kolom. Indeks hasilnya adalah kolom DataFrame asli. Kolom dengan tipe campuran disimpan dengan tipe objek. used to find the dtypes in the DataFrame. This returns a Series with the data type of each column. The result's index is the original DataFrame's columns. Columns with mixed types are stored with the object dtype.

Apakah bingkai data merupakan objek Python?

DataFrame. DataFrame adalah struktur data berlabel 2 dimensi dengan kolom dari tipe yang berpotensi berbeda. Anda dapat menganggapnya seperti spreadsheet atau tabel SQL, atau kumpulan objek Seri. Ini umumnya merupakan objek pandas yang paling umum digunakan .