三次样条插值仅产生 nans 或抛出错误
cubic spline interpolation produces only nans or throws an error
我正在尝试将数据帧从每季度缩减为每月。
i = ['2000-01-01','2000-04-01','2000-07-01','2000-10-01','2001-01-01','2001-04-01','2001-07-01','2001-10-01']
d = [0,54957.84767,0,0,0,56285.54879,0,0]
df = pd.DataFrame(index=i, data=d)
df.index = pd.to_datetime(df.index,infer_datetime_format=True)
df.index = df.index.to_period('Q')
df.resample('M').interpolate(method='cubic')
这会抛出类型错误:
TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
如果我跳过这一行:
df.index = df.index.to_period('Q')
然后它只产生 nans
这个有效:
import pandas as pd
import matplotlib.pyplot as plt
i = pd.to_datetime(['2000-01-01','2000-04-01','2000-07-01','2000-10-01','2001-01-01','2001-04-01','2001-07-01','2001-10-01'])
d = [0,54957.84767,0,0,0,56285.54879,0,0]
df = pd.DataFrame({'Values': d}, index=i)
df_resampled = df.resample('M').first().interpolate(method='cubic')
# Display the fit
df['Values'].plot(linestyle='none', marker='D', color='red')
df_resampled['Values'].plot(label='fit')
plt.xlabel('Date')
plt.ylabel('Values, a.u.')
plt.legend()
我正在尝试将数据帧从每季度缩减为每月。
i = ['2000-01-01','2000-04-01','2000-07-01','2000-10-01','2001-01-01','2001-04-01','2001-07-01','2001-10-01']
d = [0,54957.84767,0,0,0,56285.54879,0,0]
df = pd.DataFrame(index=i, data=d)
df.index = pd.to_datetime(df.index,infer_datetime_format=True)
df.index = df.index.to_period('Q')
df.resample('M').interpolate(method='cubic')
这会抛出类型错误:
TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
如果我跳过这一行:
df.index = df.index.to_period('Q')
然后它只产生 nans
这个有效:
import pandas as pd
import matplotlib.pyplot as plt
i = pd.to_datetime(['2000-01-01','2000-04-01','2000-07-01','2000-10-01','2001-01-01','2001-04-01','2001-07-01','2001-10-01'])
d = [0,54957.84767,0,0,0,56285.54879,0,0]
df = pd.DataFrame({'Values': d}, index=i)
df_resampled = df.resample('M').first().interpolate(method='cubic')
# Display the fit
df['Values'].plot(linestyle='none', marker='D', color='red')
df_resampled['Values'].plot(label='fit')
plt.xlabel('Date')
plt.ylabel('Values, a.u.')
plt.legend()