Pandas: Permintaan DataFrame.to_tsv() untuk membaca teks yang dibatasi tab

Dibuat pada 11 Jun 2015  ·  16Komentar  ·  Sumber: pandas-dev/pandas

Saya mengusulkan sebuah fungsi, yang dapat dipanggil pada DataFrame, bernama to_tsv atau to_table. Fungsinya setara dengan to_csv() dengan argumen sep='\t' . Sementara to_tsv() berisi fungsionalitas untuk menulis file tsv, saya merasa menjengkelkan untuk selalu harus menentukan argumen tambahan. Saya lebih suka file tsv daripada file csv karena tab lebih jarang muncul dan oleh karena itu mengurangi kebutuhan untuk melarikan diri. Saya juga menemukan rendering teks biasa lebih mudah dibaca. Saya khawatir bahwa kurangnya fungsi to_tsv() khusus mendorong penggunaan csv melalui tsv. Saat ini read_table() default ke pemisah tab, tetapi tidak ada fungsi yang setara untuk menulis.

IO CSV

Komentar yang paling membantu

+1. Sebagai praktisi, saya akan sangat menghargai gula to_tab .

Semua 16 komentar

Selain hanya to_csv(sep='\t') , fungsi to_tsv harus mempertimbangkan untuk mengubah kutipan default, karena kutipan kurang diperlukan untuk file tsv.

Pandas API sudah berantakan dengan kelebihan metode kenyamanan yang jarang digunakan. Saya benar-benar tidak berpikir menambahkan yang lain adalah ide yang bagus.

Saya setuju dengan @shoyer di sini. Semua fungsionalitas ada untuk melakukan ini dalam to_csv , dan mengingat kami sudah memiliki banyak metode, saya pikir alasan untuk menambahkan yang baru harus lebih kuat daripada dapat memberikan default lainnya.

Saya menutup ini (kami memiliki terlalu banyak masalah terbuka ..), tetapi diskusi pasti dapat dilanjutkan jika diperlukan.

+1. Sebagai praktisi, saya akan sangat menghargai gula to_tab .

Saya pikir alasan untuk menambahkan yang baru harus lebih kuat daripada dapat memberikan default lainnya.

Kenyamanan IMO adalah pembenaran yang layak (orang cenderung menulis banyak file teks, jadi to_csv harus terus-menerus dilengkapi dengan parameter).

Namun, motivasi utama saya adalah meremehkan format CSV. Saya sedih melihat orang masih menggunakan CSV daripada TSV. Jelas dukungan excel/database memiliki peran untuk dimainkan. Tetapi proyek seperti panda harus berusaha membuat praktik terbaik menjadi yang termudah untuk diterapkan.

meskipun ini bukan masalah besar bagi saya saat ini, csv berpusat pada representasi AS/Persemakmuran dan tidak sadar secara internasional. Dengan semua filosofi Pythonic tentang penerimaan UTF dan internasionalisasi, tab-separated harus lebih disukai daripada csv / titik koma-sv.

Meskipun saya dapat memahami sentimen yang dikemukakan oleh @shoyer , saya setuju dengan @dhimmel. Menurut pengalaman saya, TSV lebih merupakan format standar untuk analisis data daripada CSV. Ada banyak kasus penggunaan di mana format TSV merupakan persyaratan, sedangkan saya tidak terbiasa dengan format CSV (ada beberapa contoh penggunaan umum di sini ). TSV juga memiliki keunggulan karena teks mentahnya mudah dibaca, dan menghindari masalah kutipan seperti yang disebutkan oleh @dhimmel.

Saya hanya sedikit menentang menambahkan to_tsv . Dalam pengalaman saya (di AS) CSV lebih umum daripada TSV (setidaknya pada nama untuk format file), tetapi hanya sedikit. Keutamaan utama yang dimiliki to_tsv adalah bahwa namanya membuatnya langsung jelas apa yang dilakukannya.

CSV dan TSV keduanya didukung dengan baik dan banyak digunakan dalam ilmu data. CSV lebih merupakan format lama, sehingga banyak proyek yang berfokus ke belakang secara default ke CSV. Namun, saya pikir proyek yang berfokus ke depan harus default ke TSV, karena lebih baik untuk ilmu data. Karena tidak ada fungsi output default to_text_delimited_file di panda, to_csv adalah default de facto. Karena sebagian besar pengguna tidak cukup peduli untuk menentukan secara manual sep='\t' , panda berkontribusi pada prevalensi CSV di atas TSV dan menunda munculnya format superior.

Maafkan ketidaktahuan saya tentang masalah ini tetapi selain lebih mudah dibaca sebagai manusia, jika dan hanya jika tajuk kolom memiliki karakter yang kira-kira sama dengan data terkait yang tidak selalu demikian, keuntungan apa yang diberikan TSV dibandingkan CSV? Jujur penasaran jika ada perbedaan kinerja antara keduanya, saya menggunakan TSV sekarang tapi jujur ​​hanya karena file data yang saya kerjakan datang dalam format itu jadi saya meninggalkannya dalam format yang sama.

keuntungan apa yang diberikan TSV dibandingkan CSV?

@Starkiller4011 tab adalah pemisah yang lebih alami untuk data kolom. Mereka membutuhkan lebih sedikit kutipan, karena nilai jarang mengandung tab tetapi sering mengandung koma.

Jujur penasaran apakah ada perbedaan performa di antara keduanya

Saya berharap perbedaan kinerjanya sepele. Namun, seperti kebanyakan hal dalam ilmu data, jenis kinerja sebenarnya yang penting adalah efisiensi programmer. Dan saya pikir TSV lebih bagus untuk digunakan daripada CSV.

Tidak semua orang setuju bahwa pemisahan tab lebih unggul dari csv -- saya tidak, misalnya.

Sebagai programmer Python, kita tahu bahwa spasi tidak selalu dipertahankan di berbagai operasi, seperti menyalin dan menempel. Kita yang menjawab banyak pertanyaan tentang SO, misalnya, secara teratur harus menggunakan sep="\s\s+" untuk mengurai teks yang telah dibuang orang dalam format yang dipisahkan spasi, dan kita harus berharap mereka memiliki cukup ruang antara kolom agar itu berfungsi. Jika mereka menggunakan koma, atau titik koma, atau pipa, atau sesuatu, ini tidak akan menjadi masalah. (Dan saya baru saja memikirkan karat, yang dulu digunakan cukup luas di beberapa bidang.)

Jika kita ingin menambahkan alias to_tsv untuk membuat beberapa orang lebih bahagia, oke. Tapi jangan berpura-pura bahwa TSV tidak memiliki sakit kepala sendiri ketika Anda bekerja dengannya, dan satu-satunya keuntungan yang dapat saya pikirkan adalah lebih sedikit mengutip.

Saya pikir ada baiknya mengambil langkah mundur dan menyadari bahwa fungsi seperti to_csv agak konyol, solusinya harus fungsi to_table yang lebih umum yang memerlukan pembatas untuk ditentukan, dan to_csv yang mana write.table() , yang lebih masuk akal.

Sebagai catatan, saya pikir baik CSV dan TSV dan format yang dapat diterima dan bagus. Keduanya harus didukung. @dsm054 menampilkan beberapa keuntungan menarik untuk pembatas non-spasi.

Masalah yang lebih besar menurut saya adalah menggunakan ekstensi .csv tanpa pandang bulu (misalnya ketika merujuk ke TSV). Lihat diskusi di https://github.com/pandas-dev/pandas/pull/14587. Saya setuju dengan @stevekm bahwa to_table harus menjadi fungsi umum di mana Anda harus menentukan pembatas Anda, sementara to_csv atau to_tsv harus fokus pada standar tersebut. Melakukan hal ini dalam kompatibilitas mundur akan membutuhkan beberapa pemikiran. Tetapi setidaknya pandas 2 harus mempertimbangkan nama fungsi di sepanjang baris readr .

Baru mulai menggunakan kerangka data panda yang berasal dari R + rapiverse/readr dan hal pertama yang membuat saya terkesan secara negatif adalah kurangnya metode baca/tulis yang konsisten seperti:

read_csv()/write_csv(): file yang dipisahkan koma (CSV)
read_tsv()/write_tsv(): file yang dipisahkan tab
read_delim()/write_delim(): file yang dibatasi secara umum
read_fwf()/write_fwf(): file lebar tetap
read_table()/write_table(): file tabular di mana kolom dipisahkan oleh spasi putih.
read_log()/write_log(): file log web

Dalam 20 tahun melakukan ilmu data dalam genomik, saya tidak pernah menemukan file csv, sebagian besar data ada dalam format tsv (atau dibatasi spasi). Harus menentukan sep dan mengutip argumen menggunakan df.to_csv() untuk menulis file tsv (atau spasi putih) tidak nyaman untuk sedikitnya.

Memiliki df.read_tsv() df.to_tsv() untuk file yang dibatasi tab dan df.read_table() df.to_table() untuk file yang dibatasi spasi akan sangat membantu orang yang datang ke panda dari R.

Pada pandas 0.24, read_table sekarang tidak digunakan lagi (lihat https://github.com/pandas-dev/pandas/issues/21948 / https://github.com/pandas-dev/pandas/pull/ 21954). Karena saya telah menggunakan read_table sebagai pengganti kekurangan read_tsv , saya sekarang mendapatkan banyak:

FutureWarning: read_table is deprecated, use read_csv instead, passing sep='\t'.

Di sisi positifnya, menghapus read_table membuatnya lebih mudah untuk menambahkan fungsi read_tsv dan to_tsv , meskipun arus berbalik melawan fungsi kenyamanan sesuai https://github .com/pandas-dev/pandas/issues/18262?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

ebran picture ebran  ·  3Komentar

matthiasroder picture matthiasroder  ·  3Komentar

amelio-vazquez-reina picture amelio-vazquez-reina  ·  3Komentar

MatzeB picture MatzeB  ·  3Komentar

idanivanov picture idanivanov  ·  3Komentar