Saya mencoba mengurai file csv dan mengekstrak data hanya dari kolom tertentu.
Contoh csv:
ID | Name | Address | City | State | Zip | Phone | OPEID | IPEDS |
10 | C... | 130 W.. | Mo.. | AL... | 3.. | 334.. | 01023 | 10063 |
Saya mencoba untuk menangkap kolom hanya spesifik, mengatakan ID
, Name
, Zip
dan Phone
.
Kode yang saya lihat telah membuat saya percaya bahwa saya dapat memanggil kolom tertentu dengan nomor yang sesuai, jadi yaitu: Name
akan berkorespondensi dengan 2
dan mengulangi setiap baris menggunakan row[2]
akan menghasilkan semua item dalam kolom 2. Hanya saja tidak.
Inilah yang telah saya lakukan sejauh ini:
import sys, argparse, csv
from settings import *
# command arguments
parser = argparse.ArgumentParser(description='csv to postgres',\
fromfile_prefix_chars="@" )
parser.add_argument('file', help='csv file to import', action='store')
args = parser.parse_args()
csv_file = args.file
# open csv file
with open(csv_file, 'rb') as csvfile:
# get number of columns
for line in csvfile.readlines():
array = line.split(',')
first_item = array[0]
num_columns = len(array)
csvfile.seek(0)
reader = csv.reader(csvfile, delimiter=' ')
included_cols = [1, 2, 6, 7]
for row in reader:
content = list(row[i] for i in included_cols)
print content
dan saya berharap ini hanya akan mencetak kolom spesifik yang saya inginkan untuk setiap baris kecuali itu tidak, saya mendapatkan kolom terakhir saja.
'rb'
bendera untukopen()
? bukankah seharusnya sederhanar
?"rb"
sesuai untuk diteruskan kecsv.reader
.Jawaban:
Satu-satunya cara Anda akan mendapatkan kolom terakhir dari kode ini adalah jika Anda tidak memasukkan pernyataan cetak Anda dalam
for
loop Anda .Kemungkinan besar ini adalah akhir dari kode Anda:
Anda ingin ini:
Sekarang kita telah membahas kesalahan Anda, saya ingin mengambil waktu ini untuk memperkenalkan Anda ke modul panda .
Panda spektakuler untuk berurusan dengan file csv, dan kode berikut akan menjadi yang Anda butuhkan untuk membaca csv dan menyimpan seluruh kolom ke dalam variabel:
jadi jika Anda ingin menyimpan semua info di kolom Anda
Names
ke dalam variabel, ini yang perlu Anda lakukan:Ini adalah modul yang hebat dan saya sarankan Anda memeriksanya. Jika karena alasan tertentu pernyataan cetak Anda dalam
for
lingkaran dan itu masih hanya mencetak kolom terakhir, yang seharusnya tidak terjadi, tetapi beri tahu saya jika asumsi saya salah. Kode yang Anda kirim memiliki banyak kesalahan lekukan sehingga sulit untuk mengetahui di mana seharusnya. Semoga ini bermanfaat!sumber
Dengan file seperti
Akan menghasilkan
Atau sebagai alternatif jika Anda ingin pengindeksan numerik untuk kolom:
Untuk mengubah pembatas tambahkan
delimiter=" "
ke instantiation yang sesuai, yaitureader = csv.reader(f,delimiter=" ")
sumber
Gunakan panda :
Buang kolom yang tidak dibutuhkan pada waktu parse:
PS Saya hanya mengagregasi apa yang dikatakan orang lain dengan cara sederhana. Jawaban aktual diambil dari sini dan sini .
sumber
Dengan panda yang dapat Anda gunakan
read_csv
denganusecols
parameter:Contoh:
sumber
Anda bisa menggunakannya
numpy.loadtext(filename)
. Misalnya jika ini adalah basis data Anda.csv
:Dan Anda menginginkan
Name
kolom:Lebih mudah Anda dapat menggunakan
genfromtext
:sumber
Konteks: Untuk jenis pekerjaan ini Anda harus menggunakan pustaka python petl yang menakjubkan. Itu akan menghemat banyak pekerjaan dan potensi frustrasi dari melakukan hal-hal 'secara manual' dengan modul csv standar. AFAIK, satu-satunya orang yang masih menggunakan modul csv adalah mereka yang belum menemukan alat yang lebih baik untuk bekerja dengan data tabular (panda, petl, dll.), Yang baik-baik saja, tetapi jika Anda berencana untuk bekerja dengan banyak data di Karir Anda dari berbagai sumber aneh, belajar sesuatu seperti petl adalah salah satu investasi terbaik yang dapat Anda lakukan. Untuk memulai hanya perlu waktu 30 menit setelah Anda selesai menginstal pip petl. Dokumentasinya sangat bagus.
Jawab: Katakanlah Anda memiliki tabel pertama dalam file csv (Anda juga dapat memuat langsung dari database menggunakan petl). Maka Anda cukup memuatnya dan lakukan hal berikut.
sumber
Saya pikir ada cara yang lebih mudah
Jadi di sini
iloc[:, 0]
,:
berarti semua nilai,0
berarti posisi kolom. dalam contoh di bawahID
ini akan dipilihsumber
sumber
pip install pandas
terlebih dahuluBerkat cara Anda dapat mengindeks dan mengatur ulang kerangka data panda, cara yang sangat mudah untuk mengekstrak satu kolom dari file csv ke dalam variabel adalah:
Beberapa hal yang perlu dipertimbangkan:
Cuplikan di atas akan menghasilkan panda
Series
dan tidakdataframe
. Saran dari ayhan withusecols
juga akan lebih cepat jika kecepatan menjadi masalah. Menguji dua pendekatan yang berbeda menggunakan%timeit
file csv berukuran 2122 KB menghasilkan22.8 ms
untuk pendekatan usecols dan53 ms
untuk pendekatan yang saya sarankan.Dan jangan lupa
import pandas as pd
sumber
Jika Anda perlu memproses kolom secara terpisah, saya ingin merusak kolom dengan
zip(*iterable)
pola (secara efektif "unzip"). Jadi untuk contoh Anda:sumber
Untuk mengambil nama kolom , daripada menggunakan readlines () lebih baik gunakan readline () untuk menghindari loop & membaca file lengkap & menyimpannya dalam array.
sumber