2012-05-07 12 views
0

DataFrameまたはSeriesの間でインデックス値を整列しようとしていますが、 Series.interpolateを使用していますが、正しく補間していないようです。あるいは、私は何かを誤解しているかもしれません。ここで小さな例です:Series.interpolateで発生する可能性のあるバグ

x1 = np.array([0, 0.25, 0.77, 1.2, 1.4, 2.6, 3.1]) 
y1 = np.array([0, 1.1, 0.5, 1.5, 1.2, 2.1, 2.4]) 
x2 = np.array([0, 0.25, 0.66, 1.0, 1.2, 1.4, 3.1]) 
y2 = np.array([0, 0.2, 0.8, 1.1, 2.2, 0.1, 2.4]) 

df1 = DataFrame(data=y1, index=x1, columns=['A']) 
df1.plot(marker='o') 

df2 = DataFrame(data=y2, index=x2, columns=['A']) 
df2.plot(marker='o') 

df3=df1 - df2 
df3.plot(marker='o') 
print df3 

def resample(signals): 
    aligned_x_vals = reduce(lambda s1, s2: s1.index.union(s2.index), signals) 
    return map(lambda s: s.reindex(aligned_x_vals).apply(Series.interpolate), signals) 

sig1, sig2 = resample([df1, df2]) 
sig3 = sig1 - sig2 
plt.plot(df1.index, df1.values, marker='D') 
plt.plot(sig1.index, sig1.values, marker='o') 
plt.grid() 
plt.figure() 
plt.plot(df2.index, df2.values, marker='o') 
plt.plot(sig2.index ,sig2.values, marker='o') 
plt.grid() 

私はSIG1とSIG2はDF1とDF2よりますが補間された値とのより多くのポイントを持っていることを期待しています。重複していない点がいくつかあります。これはバグですか、ユーザーエラーですか?私はv0.7.3を使用しています

ありがとうございました。

答えて

1

はバグです。ソースを見ると、Series.interpolateは補間を行っている間はインデックス値を参照しません。等間隔で、インデックスにはを使用するだけです。たぶん、これは意図であり、バグではありません。よく分かりません。

私はSeries.interpolateの方法を変更し、このinterpolateの機能を思いついた。これはあなたが望むことをするでしょう。

import numpy as np 
from pandas import * 

def interpolate(serie): 
    try: 
     inds = np.array([float(d) for d in serie.index]) 
    except ValueError: 
     inds = np.arange(len(serie)) 

    values = serie.values 

    invalid = isnull(values) 
    valid = -invalid 

    firstIndex = valid.argmax() 
    valid = valid[firstIndex:] 
    invalid = invalid[firstIndex:] 
    inds = inds[firstIndex:] 

    result = values.copy() 
    result[firstIndex:][invalid] = np.interp(inds[invalid], inds[valid], 
              values[firstIndex:][valid]) 

    return Series(result, index=serie.index, name=serie.name) 
+0

ありがとうございます。私は今からソースを見ることに慣れなければならないと思う。問題追跡ツールでバグを開くべきだと思いますか? IMHOインデックスがfloat型であれば、この仮定をしてはいけません。 – dailyglen

+0

@スロスマン:バグレポートは良いアイデアです。私はあなたが期待したのと同じ行動を期待します。 – Avaris

+0

問題を作成しました:https://github.com/pydata/pandas/issues/1255 –

0

基本的な数学では、その補間の合計を合計の補間と同じにするとは思いません。特別な場合にのみ保持されます。

関連する問題