2012-05-07 2 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

@Slothman : 버그보고는 좋은 생각입니다. 기대했던 것과 똑같은 행동을 기대합니다. – Avaris

+0

다음 사이트에서 문제가 발생했습니다. https://github.com/pydata/pandas/issues/1255 –

0

저는 기본 수학이 합계의 보간법과 같은 보간 합계를 적용한다고 생각하지 않습니다. 특별한 경우에만 유지됩니다.

관련 문제