2016-09-21 58 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