2013-05-31 33 views
8

Tôi có hàng trăm đối tượng thời gian với 100000 mục nhập trong mỗi. Một số phần trăm của các mục nhập dữ liệu bị thiếu (NaN). Điều quan trọng là ứng dụng của tôi là những ứng dụng đơn lẻ, phân tán NaN hoặc chuỗi dài NaN.Pandas: chiều dài của các lỗ NaN

Vì vậy, tôi muốn có một hàm cho tôi độ dài của mỗi chuỗi NaN liền nhau. Tôi có thể làm

myseries.isnull() 

để nhận một chuỗi bool. Và tôi có thể làm di chuyển trung bình hoặc di chuyển trung bình để có được một ý tưởng về kích thước của các lỗ dữ liệu. Tuy nhiên, sẽ tốt hơn nếu có một cách hiệu quả cách nhận danh sách các lỗ hổng cho một chuỗi.

Ie, nó sẽ được tốt đẹp để có một myfunc để

a = pdSeries([1, 2, 3, np.nan, 4, np.nan, np.nan, np.nan, 5, np.nan, np.nan]) 
myfunc(a.isnull()) 
==> Series([1, 3, 2]) 

(vì có 1, 3 và 2 Nans, tương ứng)

Từ đó, tôi có thể làm cho biểu đồ có độ dài lỗ và của số and hoặc or trong tổng số nhiều chuỗi (có thể thay thế cho mỗi chuỗi) và những thứ đẹp khác.

Tôi cũng muốn lấy ý tưởng về các cách khác để định lượng "độ lồi" của các lỗ dữ liệu.

Trả lời

8
import pandas as pd 
import numpy as np 
import itertools 

a = pd.Series([1, 2, 3, np.nan, 4, np.nan, np.nan, np.nan, 5, np.nan, np.nan]) 
len_holes = [len(list(g)) for k, g in itertools.groupby(a, lambda x: np.isnan(x)) if k] 
print len_holes 

kết quả trong

[1, 3, 2] 
+1

'Series ([len (danh sách (g)) cho k, g trong groupby (a.isnull()) nếu k]) 'có lẽ là hơi hiệu quả hơn. – JAB

+0

Ah vâng, 'groupby'. Tôi đoán groupby có nghĩa là hoạt động trên dữ liệu được sắp xếp, nhưng khi không phân loại trước, nó sẽ cho tôi chính xác RLE :) –

+0

Cảm ơn, JAB, tôi không biết groupby chỉ có thể lấy một tham số. Đó là tuyệt vời, bởi vì tôi có a.isnull() đã được tính toán trong mã của tôi –

Các vấn đề liên quan