2014-01-06 162 views
2

插我想爲熊貓系列的結構如下Python的大熊貓與新的X軸

X 
22.88  3.047 
45.75  3.215 
68.63  3.328 
91.50  3.423 
114.38  3.516 
137.25  3.578 
163.40  3.676 
196.08  3.756 
228.76  3.861 
261.44  3.942 
294.12  4.012 
326.80  4.084 
359.48  4.147 
392.16  4.197 
Name: Y, dtype: float64 

我想,讓我有一個新的系列覆蓋X=[23:392:1]插值數據做插值。我查了一下document,但沒有找到我可以在哪裏輸入新的x軸。我錯過了什麼?我如何使用新的x軸進行插值?

回答

2

可以直接調用numpy.interp()

import numpy as np 
import pandas as pd 
import io 
data = """x y 
22.88  3.047 
45.75  3.215 
68.63  3.328 
91.50  3.423 
114.38  3.516 
137.25  3.578 
163.40  3.676 
196.08  3.756 
228.76  3.861 
261.44  3.942 
294.12  4.012 
326.80  4.084 
359.48  4.147 
392.16  4.197""" 

s = pd.read_csv(io.BytesIO(data), delim_whitespace=True, index_col=0, squeeze=True) 

new_idx = np.arange(23,393) 
new_val = np.interp(new_idx, s.index.values.astype(float), s.values) 
s2 = pd.Series(new_val, new_idx) 
2

這可以用pandasreindexinterpolate來完成:

In [27]: s 
Out[27]: 
      1 
0    
22.88 3.047 
45.75 3.215 
68.63 3.328 
91.50 3.423 
114.38 3.516 
137.25 3.578 
163.40 3.676 
196.08 3.756 
228.76 3.861 
261.44 3.942 
294.12 4.012 
326.80 4.084 
359.48 4.147 
392.16 4.197 

[14 rows x 1 columns] 

In [28]: idx = pd.Index(np.arange(23, 392)) 

In [29]: s.reindex(s.index + idx).interpolate(method='values') 
Out[29]: 
       1 
22.88 3.047000 
23.00 3.047882 
24.00 3.055227 
25.00 3.062573 
26.00 3.069919 
27.00 3.077265 
28.00 3.084611 
29.00 3.091957 
30.00 3.099303 
31.00 3.106648 
32.00 3.113994 
33.00 3.121340 
34.00 3.128686 
35.00 3.136032 
36.00 3.143378 
37.00 3.150724 
38.00 3.158070 
39.00 3.165415 
40.00 3.172761 
41.00 3.180107 
42.00 3.187453 
43.00 3.194799 
44.00 3.202145 
45.00 3.209491 
45.75 3.215000 
46.00 3.216235 
47.00 3.221174 
48.00 3.226112 

的想法是創建索引你想(s.index + idx),其被自動排序,重新索引一個(這使得一堆NaN在新的點上,插值填充NaN,使用values方法,它在索引點進行插值。

+0

讓我知道如果你認爲只是傳遞一個數組來'插入'會更容易。我們決定保持API(和實現)簡單,並使用'reindex'ing。 – TomAugspurger