ValueError при заполнении ячейки dataframe pandas с помощью массива Numpy

Thomas Matthew спросил: 03 февраля 2018 в 10:39 в: python

Цель состоит в создании серии Pandas, где каждый элемент представляет собой массив numpy переменной длины. Эти массивы исходят из функции getContexts, которая получает замаскированные результаты одного файла данных cnv и применяет его к другому фрейму данных exp. Это делается дважды: один раз для True (убыток) и один раз для условия False (no_loss). Ошибка, которую я получаю, это ValueError: setting an array element with a sequence, встречающийся во второй строке в getContexts.

Вот некоторые тестовые данные, которые можно попробовать:

deldf = pd.DataFrame([[0,1,0,1],
                     [1,0,1,0],
                     [1,1,1,0]])
deldf.columns = ['a','b','c','d']
deldf['cnv'] = ['k','l','m']
deldf.set_index(deldf['cnv'], inplace=True, drop=True)
del deldf['cnv']d_mask = deldf == 1expdf = pd.DataFrame([[0,2,1,4,np.array([1,1,1])],
                     [10,0,12,1,np.array([2,2,2])],
                     [1,1,1,1,np.array([3,3,3])]])
expdf.columns = ['a','b','c','d','arr']
expdf['exp'] = ['x','y','Z']
expdf.set_index(expdf['exp'], inplace=True, drop=True)
del expdf['exp']results = pd.DataFrame(dels.index)
results['exp'] = expdf.index
results.columns = ['cnv','exp']

Вот моя попытка решения (обратите внимание, что d_mask является глобальной переменной):

def getContexts(exp_g, cnv_gm):
    lossTrue = d_mask.loc[cnv_g]
    # error is thrown at line below
    loss = np.array(expdf.loc[exp_g].where(lossTrue, np.nan).dropna())
    no_loss = np.array(expdf.loc[exp_g].where(~lossTrue, np.nan).dropna())
    return loss, no_loss

Вот мой вызов getContexts :

results['loss'], results['no_loss'] = np.vectorize(getContexts)(results['exp'], results['cnv'])

Конечный результат должен выглядеть так, как показано ниже, поэтому я могу проверять дисперсию, длину, значение и размер эффекта на двух столбцах массивов.


0 ответов