Как преобразовать столбчатый список в Pandas в пустую матрицу: расширение списка в столбцы? - PullRequest
0 голосов
/ 31 января 2019

Справочная информация:

Фактическая проблема, которую я пытаюсь решить, состоит в переходе от SparseVectors к Spark DataFrame и к массиву массивов.Поэтому в качестве шага 1 я решил вызвать UDF для нужного столбца.

spark.udf.register("sparseToArray", lambda x: x.toArray().tolist(), ArrayType(elementType=FloatType(), containsNull=False))

и назвал его так:

dense_input = input_df.selectExpr("sparseToArray(features) as features")

Так что теперь я могу вызывать toPandas (), но я 'В итоге я получил столбец «списка» объектов, который подводит меня к теме этого поста.

dense_input.toPandas()
# see below for how this shows up

Преобразованная проблема:

У меня есть одинсписок номеров столбцов, из которых я хотел бы создать столбцы в numpy.Мне нужна помощь в этом.

Панды:

shape(3,1)
size = 3
Values: ndarray of lists

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 1 columns):
features    3 non-null object
dtypes: object(1)
memory usage: 104.0+ bytes

Sample:

'features'
 0 list([1,2,3,4])
 1 list([5,6,7,8])
 2 list([9,10,11,12])

Я бы хотел быть ndarray как:

shape: [4,3]

[
 [1,2,3,4],
 [5,6,7,8],
 [9,10,11,12]
]

Ответы [ 2 ]

0 голосов
/ 31 января 2019

, как сказано в комментарии, вы можете использовать

my_array = np.array(df.features.values.tolist())

my_array
Out[56]: 
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])
type(my_array)
Out[57]: numpy.ndarray

хранение объекта в кадре данных не рекомендуется и может привести к непредвиденному поведению

0 голосов
/ 31 января 2019

РЕДАКТИРОВАТЬ: Это должно быть то, что вы хотите.

import pandas as pd
import numpy as np
data = pd.DataFrame()
data['Feature'] = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]

def iterator(dataframe_column):
    for i in dataframe_column:
        yield i
matrix = []
for row in iterator(data['Feature']):
    matrix.append(row)

result = np.array(matrix)
>>> print(result.shape)
(3, 4)

>>> result
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])

>>> type(result)
<type 'numpy.ndarray'>

Если проблема не устранена, вам необходимо предоставить код.Я не могу воспроизвести объекты списка в кадре данных, кроме тех, что в моем коде

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...