Pandas로 탭으로 구분 된 파일 읽기-Windows에서는 작동하지만 Mac에서는 작동하지 않음


91

Windows에서 Pandas / Python으로 탭으로 구분 된 데이터 파일을 문제없이 읽고 있습니다. 데이터 파일은 처음 세 줄에 메모를 포함하고 그 뒤에 헤더가 있습니다.

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

이제 Mac에서이 파일을 읽으려고합니다. (Mac에서 Python을 처음 사용했습니다.) 다음과 같은 오류가 발생합니다.

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

read_csv 에 대한 error_bad_lines 인수 를 False로 설정하면 다음 정보가 표시되며 마지막 행이 끝날 때까지 계속됩니다.

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

인코딩 인수에 대한 값을 지정해야 합니까? 파일 읽기가 Windows에서 잘 작동하기 때문에 필요하지 않은 것처럼 보입니다.


두 OS에서 똑같은 버전의 pandas를 사용하고 있습니까? Mac의 문제를 설명하는 샘플 데이터를 제공 할 수 있습니까?
joris

무관 : 파이썬 (0)과 의 차이점을 이해 (0,)합니까? 참고 : (0)is 0및 is-쉼표 (0,)0,괄호가 아닌 튜플 (빈 항목 제외)을 만듭니다.
jfs

시도해 보셨습니까 df = pd.read_table(myfile, skiprows=[0,1,2], header=0)?
pbreach

안녕하세요. 제안 해 주셔서 감사합니다. 임시 해결책을 만들었지 만이 문제를 다시 검토하고 향후 더 나은 해결책을 찾아야 할 수도 있습니다. 내가 할 때, 나는 당신의 제안을 더 자세히 조사 할 것입니다. 내 임시 해결책은 내가 가지고있는 (그리고 이전에 Excel을 사용하여 문제가있는 탭으로 구분 된 파일로 변환 한) csv 파일을 가져 와서 Google 문서와 함께 .tsv로 저장하는 것이 었습니다. Gdocs는 당시 나에게 가장 편리한 문서 응용 프로그램 이었기 때문에 사용했습니다. 이 변환은 작동했습니다. Pandas는 파일을 올바르게 읽을 수 있었고 나머지 코드로 이동했습니다.
user3062149

Mac에서 여기에 표시되는 문제는 라인 터미네이터라고 생각합니다. 맥에서 만든 스프레드 시트는 파이썬에서 csv_reader lib 디렉토리를 포함하여, 다양한 라이브러리와 재미 행동의 모든 종류를 일으킬 수 있습니다
브래드 샌더스

답변:


146

가장 큰 단서는 행이 모두 한 줄로 반환된다는 것입니다. 이는 줄 종결자가 무시되거나 존재하지 않음을 나타냅니다.

csv_reader의 줄 종결자를 지정할 수 있습니다. 당신이로 끝납니다 만든 선 맥에있는 경우 \r가 아닌 리눅스 표준 \n더 나은 여전히 나에 윈도우의 멜빵과 벨트 방식은 \r\n.

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

코덱 패키지를 사용하여 모든 데이터를 열 수도 있습니다. 이것은 문서 로딩 속도를 희생시키면서 견고성을 증가시킬 수 있습니다.

import codecs

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

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

3
추가 코덱 코드가 도움이되었습니다. 그런 다음 read_csv에 동일한 작업을 수행하는 매개 변수가 있음을 깨달았습니다. encoding = 'utf-16'을 추가했으며 문제가 해결되었습니다.
Mikhail Venkov 2011

4

또 다른 옵션은 engine='python'명령 에 추가 하는 것입니다.pandas.read_csv(filename, sep='\t', engine='python')

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.