2017-08-07 32 views
6

Tôi có một dataframe trong đó tôi muốn lưu trữ 'thô' numpy.array:cửa hàng numpy.array trong các tế bào của một Pandas.DataFrame

df['COL_ARRAY'] = df.apply(lambda r: np.array(do_something_with_r), axis=1) 

nhưng có vẻ như pandas cố gắng để 'giải nén' các NumPy. mảng.

Có cách giải quyết khác không? Khác hơn là sử dụng một wrapper (xem chỉnh sửa dưới đây)?

Tôi đã thử reduce=False không thành công.

EDIT

này hoạt động, nhưng tôi phải sử dụng 'giả' Data lớp để quấn xung quanh mảng, đó là không đạt yêu cầu và không phải là rất thanh lịch.

class Data: 
    def __init__(self, v): 
     self.v = v 

meas = pd.read_excel(DATA_FILE) 
meas['DATA'] = meas.apply(
    lambda r: Data(np.array(pd.read_csv(r['filename'])))), 
    axis=1 
) 

Trả lời

9

Sử dụng một wrapper xung quanh mảng NumPy tức là vượt qua các mảng NumPy dạng danh sách

a = np.array([5,6,7,8]) 
df = pd.DataFrame({"a":[a]}) 

Output:

 
      a 
0 [5, 6, 7, 8] 

Hoặc bạn có thể sử dụng apply(np.array) bằng cách tạo ra các bộ tức là nếu bạn có một khung dữ liệu

df = pd.DataFrame({'id':[1,2,3,4],'a':['on','on','off','off'], 'b':['on','off','on','off']}) 

df['new'] = df.apply(lambda r: tuple(r),axis=1).apply(np.array) 

Output:

 
    a b id   new 
0 on on 1 [on, on, 1] 
1 on off 2 [on, off, 2] 
2 off on 3 [off, on, 3] 
3 off off 4 [off, off, 4] 
df['new'][0] 

Output:

array(['on', 'on', '1'], dtype='<U2') 
+0

đó làm việc , nhưng sau đó tôi muốn sử dụng một lớp giả hơn là một danh sách. –

+0

Câu trả lời của tôi có được cập nhật ohk cho bạn không? – Dark

+0

Điều đó có tác dụng nếu thay vì 'tuple (r)' bạn làm một cái gì đó như 'np.array ([[1,2], [3,4]])', tức là. một mảng 2-dim? –

1

Bạn có thể quấn args dữ liệu Khung dữ liệu trong dấu ngoặc vuông để duy trì np.array trong mỗi tế bào:

one_d_array = np.array([1,2,3]) 
two_d_array = one_d_array*one_d_array[:,np.newaxis] 
two_d_array 

array([[1, 2, 3], 
     [2, 4, 6], 
     [3, 6, 9]]) 


pd.DataFrame([ 
    [one_d_array], 
    [two_d_array] ]) 

            0 
0       [1, 2, 3] 
1 [[1, 2, 3], [2, 4, 6], [3, 6, 9]] 
Các vấn đề liên quan