Python 如何将Pandas中的列列表转换为numpy矩阵:将列表扩展为列?

Python 如何将Pandas中的列列表转换为numpy矩阵:将列表扩展为列?,python,pandas,numpy,Python,Pandas,Numpy,背景: 我试图解决的实际问题是从SparseVector的Spark数据帧到numpy阵列。因此,在步骤1中,我决定对所需列调用一个UDF spark.udf.register("sparseToArray", lambda x: x.toArray().tolist(), ArrayType(elementType=FloatType(), containsNull=False)) 并这样称呼它: dense_input = input_df.selectExpr("sparseToArra

背景:

我试图解决的实际问题是从SparseVector的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(),但最后我会得到一列“list”对象,这就引出了本文的主题

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])

编辑:这应该是您想要的。

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'>
将熊猫作为pd导入
将numpy作为np导入
data=pd.DataFrame()
数据['Feature']=[1,2,3,4],[5,6,7,8],[9,10,11,12]]
def迭代器(dataframe_列):
对于dataframe_列中的i:
产量一
矩阵=[]
对于迭代器中的行(数据['Feature']):
矩阵追加(行)
结果=np.数组(矩阵)
>>>打印(结果.形状)
(3, 4)
>>>结果
数组([[1,2,3,4],
[ 5,  6,  7,  8],
[ 9, 10, 11, 12]])
>>>类型(结果)

如果问题仍然存在,则需要提供代码。我无法在dataframe中复制列表对象,除了我的代码中的对象,正如注释中所述,您可以使用

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

不建议在数据帧中存储对象,这可能会导致意外行为

不建议在数据帧中存储列表。不过,
ar=features.values.tolist()
似乎是个XY问题。你是如何得到一个列表的数据框架的?添加了一些评论来提供一些背景信息。这和“.values”不一样吗?它不做我想做的事,请检查我的编辑。你的形状不对。你需要形状(3,4),我最终得到一个列表对象数组
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