Source code for libpyhat.transform.interp

# This function interpolates the spectra in one data frame onto a new set of
# wavelenths.
# Typically used to get data from different instruments onto the same set of
# wavelengths so they can be used together.
import numpy as np
import pandas as pd
import scipy as sp


[docs] def interp(df, xnew, spect_label="wvl"): xnew = np.array(xnew, dtype="float") metadata_cols = df.columns.levels[0] != spect_label metadata = df[df.columns.levels[0][metadata_cols]] old_wvls = np.array(df[spect_label].columns, dtype="float") old_spectra = np.array(df[spect_label]) new_spectra = np.empty([len(old_spectra[:, 0]), len(xnew)]) * np.nan interp_index = (xnew > min(old_wvls)) & (xnew < max(old_wvls)) f = sp.interpolate.interp1d(old_wvls, old_spectra, axis=1) new_spectra[:, interp_index] = f(xnew[interp_index]) xnew = list(xnew) for i, x in enumerate(xnew): xnew[i] = (spect_label, x) new_df = pd.DataFrame( new_spectra, columns=pd.MultiIndex.from_tuples(xnew), index=df.index ) new_df = pd.concat([new_df, metadata], axis=1) df = new_df return df