2016-10-06 188 views
1

在數據幀中的列表傳輸到numpy的陣列對於一個數據幀df無法與蟒-大熊貓

name  list1     list2 
a   [1, 3, 10, 12, 20..]  [2, 6, 23, 29...] 
b   [2, 10, 14, 3]   [4, 7, 8, 13...] 
c   []      [98, 101, 200] 
... 

我想將list1list2轉移到np.array然後hstack它們。下面是我做的:

df.pv = df.apply(lambda row: np.hstack((np.asarray(row.list1), np.asarray(row.list2))), axis=1) 

而且我得到了這樣的錯誤:

ValueError: Shape of passed values is (138493, 175), indices imply (138493, 4) 

138493==len(df)

請注意,在list1list2一些值爲空列表,[]。列表的長度在行之間是不同的。你知道什麼原因,我該如何解決這個問題?提前致謝!

編輯:

當我只是嘗試一個列表轉換爲數組:

df.apply(lambda row: np.asarray(row.list1), axis=1) 

錯誤也會發生:

ValueError: Empty data passed with indices specified. 
+0

你能提供一個可重現的輸入嗎? –

+0

@ColonelBeauvel謝謝你的回覆!上述樣品是否可重複使用? – user5779223

+0

@ user5779223你是怎麼創建你的數據框的,這就是他的意思 – MMF

回答

1

你的應用功能是幾乎正確。所有你需要做的 - 將np.hstack()函數的輸出轉換回python列表。

df.apply(lambda row: list(np.hstack((np.asarray(row.list1), np.asarray(row.list2)))), axis=1) 

的代碼如下所示(包括DF創造):

df = pd.DataFrame([('a',[1, 3, 10, 12, 20],[2, 6, 23, 29]), 
        ('b',[2, 10, 1.4, 3],[4, 7, 8, 13]), 
        ('c',[],[98, 101, 200])], 
        columns = ['name','list1','list2']) 

df['list3'] = df.apply(lambda row: list(np.hstack((np.asarray(row.list1), np.asarray(row.list2)))), axis=1) 

print(df) 

輸出:

0    [1, 3, 10, 12, 20, 2, 6, 23, 29] 
1 [2.0, 10.0, 1.4, 3.0, 4.0, 7.0, 8.0, 13.0] 
2       [98.0, 101.0, 200.0] 
Name: list3, dtype: object 

如果你想有一個numpy的陣列,我能得到它的唯一途徑工作是:

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

print(type(df['list3'].ix[0])) 
Out[] : numpy.ndarray 
+0

感謝您的回答,但如果我想讓它成爲一個numpy數組呢? – user5779223