Я просматривал несколько версий своей проблемы здесь и не могу найти ответ на вопрос, что я пытаюсь сделать.
Задача:
У меня есть Pandas фрейм данных с кучей данных десятичных чисел, собранных за несколько итераций эксперимента (каждая строка), для нескольких длин волн света (каждый столбец). Эти интервалы длин волн являются заголовками столбцов, и интервал между длинами волн / столбцами в настоящее время составляет 2,5 из-за ограничений нашей машины.
Теперь мне нужно вычислить, какими должны быть значения каждой строки с интервалами длины волны 0,1 вместо 2,5. Это потребует от меня создания новых заголовков столбцов с интервалом 0,1 (таким образом, 24 новых столбца между каждым из моих текущих столбцов), а затем выполнение линейной интерполяции значений в каждой строке на каждом шаге 0,1.
Кто-нибудь может помочь? Я в полной растерянности, как это сделать.
Что у меня так далеко:
# data_in = my original Panda dataframe with experiment data.
# wavelengths (column headers) go from 400 to 900 in 2.5nm intervals.
# I want 400 to 900 in 0.1 nm intervals.
# Create a copy dataframe for generating the interpolated columns,
# copying the structure of the original file for the first 3 columns.
# (I need the first 3 columns intact for an unimportant reason)
data_interp = data_in[data_in.columns[0:3]].copy()
# Interpolate 400 to 900 nm in 0.1 nm steps for the column headers.
wave_array = np.linspace(400, 900, num=5000, endpoint=True)
# Import the interpolated numpy array as column headers in the new panda dataframe.
data_interp = pd.concat([data_interp,pd.DataFrame(columns=wave_array)])
# Use the pandas 'update' function to map any matching instances of columns and their data
# from 'data_in' to 'data_interp' (ie, import all the 2.5 nm interval data from
# the old dataframe to their proper place in the new dataframe).
data_interp.update(data_in)
Теперь у меня есть новый кадр данных Panda (data_interp), который содержит все мои исходные данные с интервалом 2,5 нм , а также TON пустых столбцов с интервалом заголовков 0,1 нм.
Мне нужно заполнить все эти пустые ячейки интерполированными данными, рассчитанными по данным, которые присутствуют с интервалами 2,5 нм.
Любая помощь приветствуется, спасибо.
Редактировать 1: Вот пара фотографий моего входного фрейма данных (data_in) и моего нового интерполированного фрейма данных (data_interp).
data_in
:
data_interp
:
Редактировать 2: Миниатюрный пример.
# Mini data.
data_mini = [[10, 13, 11], [15, 14, 15], [19, 18, 22]]
# Convert to pandas dataframe
data_mini_pd = pd.DataFrame(data_mini, columns = [400, 402.5, 405])
# Copy new dataframe based on original dataframe
data_mini_pd_interp = data_mini_pd[data_mini_pd.columns[0:0]].copy()
# Interpolate 400 to 405 nm in 0.1 nm steps for the column headers.
wave_array_mini = np.linspace(400, 405, num=50, endpoint=True)
# Round all numbers to 1 decimal place, to prevent float placeholder overflow
# when importing to panda column headers.
wave_array_mini_round = np.around(wave_array_mini, decimals=1)
# Import the interpolated numpy array as column headers in the new panda dataframe.
data_mini_pd_interp = pd.concat([data_mini_pd_interp,pd.DataFrame(columns=wave_array_mini_round)])
# Use the pandas 'update' function to map any matching instances of columns and their data from 'data_in' to 'data_interp' (ie, import all the 2.5 nm interval
# data from the old dataframe to their proper place in the new dataframe).
data_mini_pd_interp.update(data_mini_pd)