2014-10-27 26 views
13

Tôi có tệp đầu vào trong đó mọi giá trị được lưu trữ dưới dạng chuỗi. Nó nằm trong một tệp csv với mỗi mục bên trong dấu ngoặc kép.các yếu tố được trích dẫn kép trong csv không thể đọc được với gấu trúc

Ví dụ file:

"column1","column2", "column3", "column4", "column5", "column6" 
"AM", "07", "1", "SD", "SD", "CR" 
"AM", "08", "1,2,3", "PR,SD,SD", "PR,SD,SD", "PR,SD,SD" 
"AM", "01", "2", "SD", "SD", "SD" 

Chỉ có sáu cột. Tôi cần những tùy chọn nào để nhập vào gấu trúc read_csv để đọc chính xác?

Tôi hiện đang cố gắng:

import pandas as pd 
df = pd.read_csv(file, quotechar='"') 

nhưng điều này mang lại cho tôi thông báo lỗi:. CParserError: Error tokenizing data. C error: Expected 6 fields in line 3, saw 14

Mà rõ ràng có nghĩa rằng nó được bỏ qua '"' và phân tích từng dấu phẩy như một lĩnh vực Tuy nhiên, đối với dòng 3, các cột từ 3 đến 6 phải là các chuỗi có dấu phẩy trong chúng. ("1,2,3", "PR, SD, SD", "PR, SD, SD", "PR, SD, SD")

Làm cách nào để lấy pandas.read_csv để phân tích cú pháp chính xác ?

Cảm ơn.

+0

Nếu bạn là tốt với regex bạn có thể sử dụng nó trong các đối số tháng chín để read_csv ... http://stackoverflow.com/questions/24091356/pandas-read-csv-with-final-column-containing -commas – rhaskett

Trả lời

7

Điều này sẽ hiệu quả. Nó quay trở lại trình phân tích cú pháp python (vì bạn có các dấu phân cách không thường xuyên, ví dụ như chúng là dấu phẩy và đôi khi không gian). Nếu bạn chỉ có dấu phẩy, nó sẽ sử dụng c-parser và nhanh hơn nhiều.

In [1]: import csv 

In [2]: !cat test.csv 
"column1","column2", "column3", "column4", "column5", "column6" 
"AM", "07", "1", "SD", "SD", "CR" 
"AM", "08", "1,2,3", "PR,SD,SD", "PR,SD,SD", "PR,SD,SD" 
"AM", "01", "2", "SD", "SD", "SD" 

In [3]: pd.read_csv('test.csv',sep=',\s+',quoting=csv.QUOTE_ALL) 
pandas/io/parsers.py:637: ParserWarning: Falling back to the 'python' engine because the 'c' engine does not support regex separators; you can avoid this warning by specifying engine='python'. 
    ParserWarning) 
Out[3]: 
    "column1","column2" "column3" "column4" "column5" "column6" 
"AM"    "07"  "1"  "SD"  "SD"  "CR" 
"AM"    "08" "1,2,3" "PR,SD,SD" "PR,SD,SD" "PR,SD,SD" 
"AM"    "01"  "2"  "SD"  "SD"  "SD" 
Các vấn đề liên quan