背景:
我要解决的实际问题是将SparseVectors的Spark数据帧转换为numpy数组。因此,在第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]
]
答案 0 :(得分:-1)
编辑:这应该是您想要的。
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'>
如果问题仍然存在,则需要提供代码。除了代码中的列表对象,我无法在数据框中复制列表对象
答案 1 :(得分:-1)
如评论中所述,您可以使用
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
不建议在数据框中存储对象,并且可能导致意外行为