Как лучше всего привести список массивов numpy в столбец данных pandas? - PullRequest
0 голосов
/ 17 января 2020

У меня есть список (posterior_list) из 18 000 numpy arrays длиной 82 868. У меня есть датафрейм (y_test) с формой (82,868, 1). Массивы являются задними предсказанными значениями. Я хотел бы добавить каждый массив внутри этого списка в виде столбца на фрейм данных (y_test) с конечным результатом, имеющим форму (82868, 18001).

Я попробовал следующее:

for arr in posterior_list:
    x_test.append(arr)

Это привело к следующей ошибке:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-144-a200df62319d> in <module>
      1 for arr in posterior:
----> 2     y_test.append(arr)

~\AppData\Local\Continuum\anaconda3\envs\stan_env\lib\site-packages\pandas\core\frame.py in append(self, other, ignore_index, verify_integrity, sort)
   6690         return concat(to_concat, ignore_index=ignore_index,
   6691                       verify_integrity=verify_integrity,
-> 6692                       sort=sort)
   6693 
   6694     def join(self, other, on=None, how='left', lsuffix='', rsuffix='',

~\AppData\Local\Continuum\anaconda3\envs\stan_env\lib\site-packages\pandas\core\reshape\concat.py in concat(objs, axis, join, join_axes, ignore_index, keys, levels, names, verify_integrity, sort, copy)
    226                        keys=keys, levels=levels, names=names,
    227                        verify_integrity=verify_integrity,
--> 228                        copy=copy, sort=sort)
    229     return op.get_result()
    230 

~\AppData\Local\Continuum\anaconda3\envs\stan_env\lib\site-packages\pandas\core\reshape\concat.py in __init__(self, objs, axis, join, join_axes, keys, levels, names, ignore_index, verify_integrity, copy, sort)
    287                        ' only pd.Series, pd.DataFrame, and pd.Panel'
    288                        ' (deprecated) objs are valid'.format(type(obj)))
--> 289                 raise TypeError(msg)
    290 
    291             # consolidate

TypeError: cannot concatenate object of type "<class 'numpy.ndarray'>"; only pd.Series, pd.DataFrame, and pd.Panel (deprecated) objs are valid

Итак, я попробовал следующее:

for arr in posterior:
    arr = pd.Series(arr)
    y_test.append(arr, ignore_index=True)

MemoryError: Unable to allocate array with shape (82877, 82868) and data type float64

Кто-нибудь может посоветовать лучший способ l oop в моем списке и добавить каждый массив в виде столбца на мой фрейм данных?

Ответы [ 2 ]

1 голос
/ 17 января 2020

Это то, что вы имеете в виду?

for i, arr in enumerate(posterior_list):

    y_test["list_{}".format(i)] = pd.Series(arr)
1 голос
/ 17 января 2020

Можно попробовать

y_test.join(pd.DataFrame(posterior_list,columns=y_test.index).T)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...