Bagaimana cara memuat data secara efektif pada pertanyaan Stack Overflow menggunakan pandas read_clipboard?
Saya melihat banyak pertanyaan panda di Stack Overflow hanya menyertakan beberapa baris data mereka sebagai teks, tanpa kode yang menyertai untuk menghasilkan / mereproduksinya. Saya mengetahui keberadaan read_clipboardtetapi saya tidak dapat menemukan cara secara efektif memanggil fungsi ini untuk membaca data dalam banyak situasi, seperti ketika ada spasi putih di nama header, atau objek Python seperti daftar di kolom.
Bagaimana saya bisa menggunakan pd.read_clipboard
lebih efektif untuk membaca data yang ditempelkan dalam format tidak konvensional yang tidak memudahkan pembacaan menggunakan argumen default? Apakah ada situasi di mana read_clipboard
kekurangannya?
Jawaban
read_clipboard: Panduan Pemula
read_clipboardbenar-benar merupakan anugrah bagi siapa pun yang mulai menjawab pertanyaan di tag panda . Sayangnya, para veteran panda juga tahu bahwa data yang diberikan dalam pertanyaan tidak selalu mudah untuk dimasukkan ke terminal karena berbagai komplikasi dalam format data yang diposting.
Untungnya, read_clipboard
ada argumen yang memungkinkan penanganan sebagian besar kasus ini (dan mudah). Berikut beberapa kasus penggunaan umum dan argumennya yang sesuai.
Kasus Penggunaan Umum
read_clipboard
digunakan di read_csv
bawah tenda dengan pemisah spasi putih, jadi banyak teknik penguraian data dari CSV yang diterapkan di sini, seperti
mengurai kolom dengan spasi dalam data
gunakan
sep
dengan argumen regex. Pertama, pastikan setidaknya ada dua spasi di antara kolom dan paling banyak satu spasi berurutan di dalam data kolom itu sendiri. Kemudian Anda dapat menggunakansep=r'\s{2,}'
yang artinya "pisahkan kolom dengan mencari setidaknya dua spasi putih berturut-turut untuk pemisah" (catatan:engine='python'
diperlukan untuk pemisah multichar atau regex):df = pd.read_clipboard(..., sep=r'\s{2,}', engine='python')
Lihat juga Bagaimana Anda menangani nama kolom yang memiliki spasi di dalamnya saat menggunakan pd.read_clipboard? .
membaca seri, bukan DataFrame
digunakan
squeeze=true
, Anda mungkin juga membutuhkanheader=None
jika baris pertama juga data.s = pd.read_clipboard(..., header=None, squeeze=True)
Lihat juga Mungkinkah ada cara yang lebih mudah menggunakan pandas read_clipboard untuk membaca Serial? .
memuat data dengan nama tajuk khusus
digunakan
names=[...]
bersama denganheader=None
danskiprows=[0]
untuk mengabaikan header yang ada.df = pd.read_clipboard(..., header=None, names=['a', 'b', 'c'], skiprows=[0])
memuat data tanpa header apa pun
- menggunakan
header=None
- menggunakan
atur satu atau lebih kolom sebagai indeks
- gunakan
index_col=[...]
dengan label atau indeks yang sesuai
- gunakan
tanggal parsing
- gunakan
parse_dates
dengan format yang sesuai. Jika melakukan parsingdatetimes
(yaitu, kolom dengan tanggal dipisahkan oleh stempel waktu), Anda mungkin juga perlu menggunakansep=r'\s{2,}'
sambil memastikan kolom Anda dipisahkan oleh setidaknya dua spasi.
- gunakan
Lihat jawaban saya ini untuk daftar yang lebih lengkap tentang read_csv
argumen untuk kasus lain yang tidak tercakup di sini ...
Peringatan
read_clipboard
adalah pisau tentara swiss. Namun, itu
tidak dapat membaca data dalam format tabel / tabulasi yang cantik (IOW, batas membuatnya lebih sulit)
- Lihat Membaca dalam kerangka data yang cukup dicetak / diformat menggunakan pd.read_clipboard? untuk solusi untuk mengatasi ini.
tidak dapat mengurai MultIndex dengan benar kecuali semua elemen dalam indeks ditentukan.
- Lihat Menyalin kerangka data MultiIndex dengan pd.read_clipboard? untuk solusi untuk mengatasi ini.
tidak bisa mengabaikan / menangani elipsis dalam data
- metode yang saya sarankan adalah menghapus elipsis secara manual sebelum mencetak
tidak dapat mengurai kolom daftar (atau objek lain) sebagai apa pun selain string. Kolom perlu diubah secara terpisah, seperti yang ditunjukkan pada Bagaimana Anda membaca dalam kerangka data dengan daftar menggunakan pd.read_clipboard? .
tidak dapat membaca teks dari gambar (jadi tolong jangan gunakan gambar sebagai sarana untuk berbagi data Anda dengan orang-orang, tolong!)
Satu kelemahan dari fungsi ini adalah bahwa ia tidak menangkap konten CTRL + C
jika penyalinan dilakukan dari sebuah PDF
file. Mengujinya dengan cara ini menghasilkan pembacaan kosong.
Tetapi dengan menggunakan editor teks biasa, itu berjalan dengan baik. Berikut ini contoh penggunaan teks yang diketik secara acak:
>>> pd.read_clipboard()
Empty DataFrame
Columns: [sfsesfsdsxcvfsdf]
Index: []