การอ่านไฟล์ที่คั่นด้วยแท็บด้วย Pandas - ทำงานบน Windows แต่ใช้ไม่ได้กับ Mac


95

ฉันอ่านไฟล์ข้อมูลที่คั่นด้วยแท็บใน Windows ด้วย Pandas / Python โดยไม่มีปัญหาใด ๆ ไฟล์ข้อมูลมีบันทึกย่อในสามบรรทัดแรกและตามด้วยส่วนหัว

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

ตอนนี้ฉันกำลังพยายามอ่านไฟล์นี้ด้วย Mac ของฉัน (ครั้งแรกของฉันที่ใช้ Python บน Mac) ฉันได้รับข้อผิดพลาดต่อไปนี้

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

หากตั้งค่าอาร์กิวเมนต์error_bad_linesสำหรับread_csvเป็น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 หรือไม่? คุณสามารถให้ข้อมูลตัวอย่างที่แสดงถึงปัญหาบน Mac ได้หรือไม่
joris

ไม่เกี่ยวข้อง: คุณเข้าใจความแตกต่างระหว่าง: (0)และ(0,)ใน Python หรือไม่? หมายเหตุ: (0)is 0and (0,)is 0,- comma สร้างทูเปิล (ยกเว้นอันว่างเปล่า) ไม่ใช่วงเล็บ
jfs

คุณลองแล้วdf = pd.read_table(myfile, skiprows=[0,1,2], header=0)หรือยัง?
pbreach

สวัสดีทุกคน. ขอบคุณสำหรับคำแนะนำ ฉันสร้างวิธีแก้ปัญหาชั่วคราว แต่อาจต้องกลับมาทบทวนปัญหานี้และมองหาวิธีแก้ไขที่ดีกว่าในอนาคต ฉันจะตรวจสอบข้อเสนอแนะของคุณเมื่อใดและเมื่อใด วิธีแก้ปัญหาชั่วคราวของฉันคือใช้ไฟล์ csv ที่ฉันมี (และก่อนหน้านี้ได้แปลงเป็นไฟล์ที่คั่นด้วยแท็บที่มีปัญหาโดยใช้ Excel) และบันทึกเป็นไฟล์. tsv ด้วย Google เอกสาร ฉันใช้ Gdocs เพียงเพราะเป็นแอปพลิเคชันเอกสารที่สะดวกที่สุดสำหรับฉันในเวลานั้น การแปลงนี้ใช้ได้ผล นุ่นสามารถอ่านไฟล์ได้อย่างถูกต้องฉันเชื่อและไปยังส่วนที่เหลือของรหัสของฉัน
user3062149

ฉันสงสัยว่าปัญหาที่คุณพบที่นี่กับ Mac ของคุณคือตัวยุติสาย สเปรดชีตที่สร้างบน Mac สามารถทำให้เกิดพฤติกรรมสนุก ๆ ได้ทุกรูปแบบกับไลบรารีต่างๆรวมถึง csv_reader lib ใน python
brad sanders

คำตอบ:


153

เบาะแสที่ใหญ่ที่สุดคือแถวทั้งหมดจะถูกส่งกลับในบรรทัดเดียว สิ่งนี้บ่งชี้ว่าตัวยุติบรรทัดกำลังถูกละเว้นหรือไม่มีอยู่

คุณสามารถระบุตัวยุติบรรทัดสำหรับ csv_reader ถ้าคุณอยู่ในแม็บรรทัดที่สร้างขึ้นจะจบลงด้วย\rมากกว่าลินุกซ์มาตรฐาน\nหรือดีกว่ายังคงเป็น suspenders \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')

4
รหัสตัวแปลงสัญญาณที่เพิ่มเข้ามาช่วยฉัน จากนั้นฉันก็รู้ว่ามีพารามิเตอร์ใน read_csv ที่ทำเช่นเดียวกัน ฉันได้เพิ่มการเข้ารหัส = 'utf-16' และแก้ไขปัญหาให้ฉันแล้ว
Mikhail Venkov

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.