2012-09-20 33 views
7

Tôi cố gắng đọc .txt với các giá trị bị thiếu bằng cách sử dụng pandas.read_csv. Dữ liệu của tôi có định dạng:tệp đọc có giá trị bị thiếu trong các chú gấu trúc trăn

10/08/2012,12:10:10,name1,0.81,4.02,50;18.5701400N,4;07.7693770E,7.92,10.50,0.0106,4.30,0.0301 
10/08/2012,12:10:11,name2,,,,,10.87,1.40,0.0099,9.70,0.0686 

với hàng nghìn mẫu có cùng tên điểm, vị trí gps và các chỉ số khác. Tôi sử dụng mã:

myData = read_csv('~/data.txt', sep=',', na_values='') 

Mã sai vì na_values ​​không cung cấp cho NaN hoặc chỉ báo khác. Các cột phải có cùng kích thước nhưng tôi hoàn thành với độ dài khác nhau.

Tôi không biết chính xác những gì nên được nhập sau khi na_values ​​(đã thử tất cả những thứ khác nhau). Cảm ơn

+0

Nếu bạn 'skiprows = 1', thì có một dòng duy nhất trong tệp. Không có tham số đó, tôi thấy rõ ràng 'NaN' trong DataFrame. – eumiro

+0

Tôi chỉ đăng hai dòng dữ liệu của mình để hiển thị định dạng của nó. skiprows = 1 không làm bất cứ điều gì với dữ liệu bị thiếu, trong một tập tin gốc có 15000 dòng và dòng đầu tiên bao gồm một số tên, những gì tôi không muốn. – tomasz74

+0

Tôi đã xóa 'skiprows = 1' để rõ ràng – tomasz74

Trả lời

11

Tham số na_values phải là "danh sách như" (xem số answer) này.

Một chuỗi là "danh sách như" vậy:

na_values='abc' # would transform the letters 'a', 'b' and 'c' each into `nan` 
# is equivalent to 
na_values=['a','b','c']` 

Tương tự:

na_values='' 
# is equivalent to 
na_values=[] # and this is not what you want! 

Điều này có nghĩa rằng bạn cần phải sử dụng na_values=[''].

+0

Cảm ơn câu trả lời của bạn. na_values ​​= [''] là lần thử đầu tiên của tôi nhưng nó không mang lại hiệu quả mong muốn. Tôi có kết quả tương tự nếu tôi lấy một đối số dưới dạng danh sách [''] hoặc dưới dạng không gian trống ''. Tôi thực sự không biết những gì khác để thử vì có vẻ như nó không tự động nhận giá trị thiếu và tôi có một vấn đề để xác định nó – tomasz74

+1

@ tomasz74 Nó có vẻ làm việc cho tôi, với ví dụ của bạn (không có 'skiprows') ... có lẽ bạn cần phải 'myData.T' (transpose). –

+0

@ tomasz74 Sau khi thử nghiệm có vẻ như '''', và với mặc định ('None') điều này chỉ làm việc cho tôi tốt (cột có kích thước tương tự) ... –

2

Bạn đang sử dụng phiên bản chú gấu trúc nào? Giải thích chuỗi rỗng là NaN là hành vi mặc định cho gấu trúc và dường như phân tích cú pháp các chuỗi rỗng trong đoạn mã dữ liệu của bạn cả trong v0.7.3 và master hiện tại mà không sử dụng tham số na_values.

In [10]: data = """\ 
10/08/2012,12:10:10,name1,0.81,4.02,50;18.5701400N,4;07.7693770E,7.92,10.50,0.0106,4.30,0.0301 
10/08/2012,12:10:11,name2,,,,,10.87,1.40,0.0099,9.70,0.0686 
""" 

In [11]: read_csv(StringIO(data), header=None).T 
Out[11]: 
        0   1 
X.1  10/08/2012 10/08/2012 
X.2   12:10:10 12:10:11 
X.3   name1  name2 
X.4    0.81   NaN 
X.5    4.02   NaN 
X.6 50;18.5701400N   NaN 
X.7 4;07.7693770E   NaN 
X.8    7.92  10.87 
X.9    10.5   1.4 
X.10   0.0106  0.0099 
X.11    4.3   9.7 
X.12   0.0301  0.0686 
Các vấn đề liên quan