我有以下数据框
index Flux_min New_Flux Flux_max
0 0 0.550613 NaN 0.537315
1 1 0.656621 NaN 0.620647
2 2 0.756486 NaN 0.700822
3 3 0.846038 NaN 0.775749
4 4 0.920871 NaN 0.843257
... ... ... ... ...
99997 99997 0.874460 NaN 0.805594
99998 99998 0.801958 NaN 0.743039
99999 99999 0.721355 NaN 0.676436
100000 100000 0.635054 NaN 0.606967
100001 100001 0.552247 NaN 0.535789
我想要做的是在
Flux_min
和 Flux_max
列之间执行样条插值(或任何其他类型的非线性插值),以便找出 New_Flux
列的值。
这是我的代码来做到这一点
synth_spectra_df = synth_spectra_df.interpolate(method='spline', order=2, axis=1)
其中
synth_spectra_df
是上面显示的数据框。如果我运行此代码,我会收到以下错误:
Traceback (most recent call last):
File "spectral_interpolation.py", line 107, in <module>
synth_spectra_df = synth_spectra_df.interpolate(method='spline', order=2, axis=1)
File "/home/fmendez/anaconda3/lib/python3.8/site-packages/pandas/core/generic.py", line 7209, in interpolate
raise ValueError(
ValueError: Index column must be numeric or datetime type when using spline method other than linear. Try setting a numeric or datetime index column before interpolating.
我已经确保所有列都是数字数据类型,并且也尝试不将索引作为列,但我仍然遇到相同的错误。如果我进行线性插值,它不会抱怨,但我对线性插值不感兴趣。
任何帮助将不胜感激
为了进行插值,您需要在列中包含值。特别是,如果您阅读该方法的 documentation,您将看到一个示例,其中明确指出某个元素由于没有前面的条目而无法填充。
请注意“b”列中的第一个条目如何保持 NaN,因为它之前没有可用于插值的条目。
这来自文档:
df = pd.DataFrame([(0.0, np.nan, -1.0, 1.0),
(np.nan, 2.0, np.nan, np.nan),
(2.0, 3.0, np.nan, 9.0),
(np.nan, 4.0, -4.0, 16.0)],
columns=list('abcd'))
df
a b c d
0 0.0 NaN -1.0 1.0
1 NaN 2.0 NaN NaN
2 2.0 3.0 NaN 9.0
3 NaN 4.0 -4.0 16.0
df.interpolate(method='linear', limit_direction='forward', axis=0)
a b c d
0 0.0 NaN -1.0 1.0
1 1.0 2.0 -2.0 5.0
2 2.0 3.0 -3.0 9.0
3 2.0 4.0 -4.0 16.0
您正在水平方向迭代,即列必须具有数字类型,但您有字符串:“Flux_min”,...
所以做类似的事情
df=synth_spectra_df
df.columns=np.linspace(0,3)
df.interpolate(method='spline', order=2, axis=1)
并将插值结果复制回synth_spectra_df