2016-09-21 86 views
0

我想将一个函数应用于熊猫数据框,这样的函数需要两个np.array作为输入,并且它使用一个定义良好的模型来适合它们。熊猫将列类型从列表转换为np.array

问题是我无法从选定列开始应用此函数,因为它们的“行”包含从JSON文件中读取的列表,而不是np.array。

现在,我已经尝试了不同的解决方案:

#Here is where I discover the problem 

train_df['result'] = train_df.apply(my_function(train_df['col1'],train_df['col2'])) 

#so I've tried to cast the Series before passing them to the function in both these ways: 

X_col1_casted = trai_df['col1'].dtype(np.array) 
X_col2_casted = trai_df['col2'].dtype(np.array) 

不起作用。

X_col1_casted = trai_df['col1'].astype(np.array) 
X_col2_casted = trai_df['col2'].astype(np.array) 

不起作用。

X_col1_casted = trai_df['col1'].dtype(np.array) 
X_col2_casted = trai_df['col2'].dtype(np.array) 

does not work。

我在想什么,现在做的是一个长期的过程,如:

从uncasted柱系列开始,将它们转换成列表(),迭代他们应用功能的np.array()单个元素,并将结果附加到临时列表中。完成后,我会将此列表转换为新列。 (显然,我不知道它是否会起作用)

你们中的任何人都知道如何帮助我吗?

编辑: 我添加一个实例是明确的:

函数假定为具有作为输入的两个np.arrays。现在它有两个列表,因为它们是从json文件中获取的。情况是这样的:

col1  col2 result 
[1,2,3]  [4,5,6] [5,7,9] 
[0,0,0]  [1,2,3] [1,2,3] 

显然这个函数不是总和函数,而是一个函数。假设这个总和只能从数组开始,而不是从列表开始,我该怎么做?

在此先感谢

+0

使用'.values'属性将其转换为数组。 –

+0

你可否告诉我怎么样?我需要将它用于单个单元格元素,而不是一次单击整列。我需要每行一个数组。 – LeoCella

+0

你是什么意思*每行一个数组* *?我从这个问题中明白你想要将整列转换为一个numpy数组。 – AlvaroP

回答

4

使用apply每个元素转换为它的等效阵列:

df['col1'] = df['col1'].apply(lambda x: np.array(x)) 

type(df['col1'].iloc[0]) 
numpy.ndarray 

数据:

df = pd.DataFrame({'col1': [[1,2,3],[0,0,0]]}) 
df 

Image

+1

完美,非常感谢! – LeoCella

+0

'df ['col1'] = df ['col1']。apply(np.array)'也适用 – tenpercent