2015-01-12 9 views
24

Czytałem plik danych rozdzielany tabulatorami w systemie Windows z Pandas/Python bez żadnych problemów. Plik danych zawiera notatki w pierwszych trzech wierszach, a następnie zawiera nagłówek.Czytanie pliku rozdzielanego tabulatorami przy Pandach - działa w systemie Windows, ale nie na Macu

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

Próbuję teraz odczytać ten plik na moim Macu. (Mój pierwszy raz korzystam z Pythona na Macu.) Otrzymuję następujący błąd.

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

Jeżeli ustawić error_bad_lines argument read_csv do Fałsz, pojawia się następujące informacje, które trwa aż do końca ostatniego rzędu.

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

Czy muszę podać wartość dla kodowania argumentu? Wydaje się, że nie powinienem, ponieważ czytanie pliku działa poprawnie w systemie Windows.

+0

Czy używasz dokładnie tej samej wersji pand w obu systemach? Czy możesz podać przykładowe dane ilustrujące problem na Macu? – joris

+0

niepowiązanych: czy rozumiesz różnicę między: '(0)' i '(0,)' w Pythonie? Uwaga: '(0)' to '0' i' (0,) 'to' 0, '- przecinek tworzy krotkę (z wyjątkiem pustą), a nie nawiasy. – jfs

+0

Czy próbowałeś 'df = pd.read_table (myfile, skiprow = [0,1,2], header = 0)'? – pbreach

Odpowiedz

26

Największa wskazówka to to, że wszystkie wiersze są zwracane w jednej linii. Oznacza to, że terminatory linii są ignorowane lub nie są obecne.

Można określić terminator linii dla csv_reader. Jeśli jesteś na komputerze Mac, utworzone linie zakończą się numerem \r, a nie standardem linuxowym \n lub jeszcze lepszym podejściem do okien i szelek dla okien z \r\n.

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

Można również otworzyć wszystkie dane za pomocą pakietu kodeków. Może to zwiększyć niezawodność kosztem szybkości ładowania dokumentu.

+0

Pomógł mi dodający kodek kodeków. Potem zdałem sobie sprawę, że w read_csv jest parametr, który robi to samo. Dodałem kodowanie = 'utf-16' i rozwiązało to problem dla mnie. –

Powiązane problemy