Saya telah membaca file data tab-delimited di Windows dengan Pandas / Python tanpa masalah. File data berisi catatan dalam tiga baris pertama dan kemudian diikuti dengan header.
df = pd.read_csv(myfile,sep='\t',skiprows=(0,1,2),header=(0))
Sekarang saya mencoba membaca file ini dengan Mac saya. (Pertama kali saya menggunakan Python di Mac.) Saya mendapatkan error berikut.
pandas.parser.CParserError: Error tokenizing data. C error: Expected 1
fields in line 8, saw 39
Jika menyetel argumen error_bad_lines untuk read_csv ke False , saya mendapatkan informasi berikut, yang berlanjut hingga akhir baris terakhir.
Skipping line 8: expected 1 fields, saw 39
Skipping line 9: expected 1 fields, saw 125
Skipping line 10: expected 1 fields, saw 125
Skipping line 11: expected 1 fields, saw 125
Skipping line 12: expected 1 fields, saw 125
Skipping line 13: expected 1 fields, saw 125
Skipping line 14: expected 1 fields, saw 125
Skipping line 15: expected 1 fields, saw 125
Skipping line 16: expected 1 fields, saw 125
Skipping line 17: expected 1 fields, saw 125
...
Apakah saya perlu menentukan nilai untuk argumen pengkodean ? Sepertinya saya tidak perlu melakukannya karena membaca file berfungsi dengan baik di Windows.
(0)
dan(0,)
dengan Python? Catatan:(0)
is0
dan(0,)
is0,
- koma membuat tupel (kecuali yang kosong), bukan tanda kurung.df = pd.read_table(myfile, skiprows=[0,1,2], header=0)
?Jawaban:
Petunjuk terbesar adalah semua baris dikembalikan dalam satu baris. Ini menunjukkan terminator baris sedang diabaikan atau tidak ada.
Anda dapat menentukan terminator baris untuk csv_reader. Jika Anda menggunakan Mac, garis yang dibuat akan berakhir dengan
\r
daripada standar linux\n
atau lebih baik lagi dengan pendekatan suspender dan sabuk jendela\r\n
.pandas.read_csv(filename, sep='\t', lineterminator='\r')
Anda juga dapat membuka semua data Anda menggunakan paket codec. Ini dapat meningkatkan ketahanan dengan mengorbankan kecepatan pemuatan dokumen.
import codecs doc = codecs.open('document','rU','UTF-16') #open for reading with "universal" type set df = pandas.read_csv(doc, sep='\t')
sumber
Pilihan lain adalah menambahkan
engine='python'
perintahpandas.read_csv(filename, sep='\t', engine='python')
sumber