2016-10-28 14 views
8

xem xét pd.Seriessgấu trúc chỉ suy khi các giá trị tồn tại trên cả hai mặt

import pandas as pd 
import numpy as np 

s = pd.Series([np.nan, 1, np.nan, 3, np.nan]) 

Làm thế nào để suy để có được:

pd.Series([np.nan, 1, 2, 3, np.nan]) 

0 NaN 
1 1.0 
2 2.0 
3 3.0 
4 NaN 
dtype: float64 

lưu ý: Tôi muốn đầu tiên và cuối cùng là np.nan để duy trì

Tôi chỉ muốn điền vào các giá trị khi tôi có giá trị ở cả hai bên để thực hiện phép nội suy.

Nói cách khác, tôi muốn nội suy, không ngoại suy.

+0

Đây là một cuộc thảo luận github: https://github.com/pandas-dev/pandas/pull/10691#issuecomment-127036592 – JohnE

+1

Kinda kỳ lạ tôi đoán, nhưng limit_direction có thể được chuyển tiếp, lạc hậu, hoặc cả hai. Sẽ được tốt đẹp để có "không" như là một lựa chọn mà sẽ làm cho các giải pháp ở đây tầm thường. FWIW, cú pháp là một IMO ít lạ đối với lệnh này do các nỗ lực nhằm duy trì khả năng tương thích ngược với cú pháp cũ. – JohnE

Trả lời

8

Tôi làm điều này - bỏ qua tiêu đề và tailing NA:

s.iloc[s.first_valid_index():s.last_valid_index()+1].interpolate() 
+1

Tôi muốn sử dụng 'ix' và bỏ qua' + 1' ... 's.ix [s.first_valid_index(): s.last_valid_index()]. ​​Intpolate()'. Sau đó, để tạo ra các kết quả của tôi, sử dụng 'combined_first' hoặc' update' ... 's.combine_first (s.ix [s.first_valid_index(): s.last_valid_index()]. ​​Intpolate())' – piRSquared

+3

Tôi muốn sử dụng ' loc' trên 'ix', khi bạn lấy lại chỉ mục thực tế và' ix' sẽ không được dùng nữa (https://github.com/pandas-dev/pandas/issues/14218). – root

+0

Bạn thực sự có thể, tôi chỉ cố gắng tránh ix và không sử dụng nó nữa vì nó có hành vi hỗn hợp, và xu hướng từ tác giả và các nhà phát triển cốt lõi của gấu trúc được biểu thị là "chúng ta hãy loại bỏ ix khỏi gấu trúc" – Boud

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