Pandalar ile sekmeyle ayrılmış dosyayı okuma - Windows'ta çalışır, ancak Mac'te çalışmaz


91

Windows'ta Pandas / Python ile sekmeyle ayrılmış bir veri dosyasını sorunsuz bir şekilde okuyorum. Veri dosyası ilk üç satırda notlar içerir ve ardından bir başlık ile devam eder.

df = pd.read_csv(myfile,sep='\t',skiprows=(0,1,2),header=(0))

Şimdi bu dosyayı Mac'imle okumaya çalışıyorum. (Mac'te Python'u ilk kez kullanıyorum.) Aşağıdaki hatayı alıyorum.

pandas.parser.CParserError: Error tokenizing data. C error: Expected 1
fields in line 8, saw 39

Ayarlanırsa error_bad_lines için argüman read_csv için yanlış , son satırın sonuna kadar devam eder aşağıdaki bilgileri, olsun.

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
...

Kodlama bağımsız değişkeni için bir değer belirtmem gerekir mi? Görünüşe göre bunu yapmamam gerekiyor çünkü dosyayı okumak Windows'ta iyi çalışıyor.


Her iki işletim sisteminde de aynı pandalar sürümünü mü kullanıyorsunuz? Mac'teki sorunu gösteren bazı örnek veriler sağlayabilir misiniz?
joris

ilgisiz:: (0)ve (0,)Python'daki arasındaki farkı anlıyor musunuz? Not: (0)is 0ve (0,)is 0,- virgül, parantez değil, bir demet oluşturur (boş olan hariç).
jfs

Denedin df = pd.read_table(myfile, skiprows=[0,1,2], header=0)mi
pbreach

Herkese selam. Öneriler için teşekkürler. Geçici bir çözüm ürettim ancak bu sorunu tekrar gözden geçirmem ve gelecekte daha iyi bir çözüm aramam gerekebilir. Yaparsam ve ne zaman yaparsam önerinize daha fazla bakacağım. Geçici çözümüm, sahip olduğum (ve daha önce Excel kullanarak sorunlu sekmeyle ayrılmış dosyaya dönüştürdüğüm) csv dosyasını alıp Google docs ile .tsv olarak kaydetmekti. Gdocs'u yalnızca o sırada mevcut olan en uygun belge uygulaması olduğu için kullandım. Bu dönüşüm işe yaradı. Pandaların dosyayı doğru bir şekilde okuyabildiğine inanıyorum ve kodumun geri kalanına geçebildiler.
user3062149

Burada Mac'inizde gördüğünüz sorunun hat sonlandırıcılar olduğundan şüpheleniyorum. Mac'te yapılan e-tablolar, python'da csv_reader lib
brad sanders da

Yanıtlar:


146

En büyük ipucu, satırların hepsinin tek bir satırda döndürülmesidir. Bu, hat sonlandırıcıların göz ardı edildiğini veya mevcut olmadığını gösterir.

Csv_reader için satır sonlandırıcı belirtebilirsiniz. Mac kullanıyorsanız, oluşturulan çizgiler \rlinux standardı yerine \nveya daha iyisi pencerelerin askıları ve kemer yaklaşımı ile bitecektir \r\n.

pandas.read_csv(filename, sep='\t', lineterminator='\r')

Codec paketini kullanarak tüm verilerinizi de açabilirsiniz. Bu, belge yükleme hızı pahasına sağlamlığı artırabilir.

import codecs

doc = codecs.open('document','rU','UTF-16') #open for reading with "universal" type set

df = pandas.read_csv(doc, sep='\t')

3
Kodeklerin eklenmesi kod parçası bana yardımcı oldu. Sonra read_csv'de aynı şeyi yapan bir parametre olduğunu fark ettim. Kodlama = 'utf-16' ekledim ve sorunu benim için düzelttim.
Mikhail Venkov

4

Başka bir seçenek engine='python'de komuta eklemek olacaktırpandas.read_csv(filename, sep='\t', engine='python')

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.