Tôi tự hỏi nếu có một cách đơn giản hơn, hiệu quả về bộ nhớ để chọn một tập con các hàng và cột từ một DataFrame gấu trúc.Làm thế nào để chuyển đổi một tập hợp con DataFrame của các cột AND hàng thành một mảng numpy?
Ví dụ, cho dataframe này:
df = DataFrame(np.random.rand(4,5), columns = list('abcde')) print df a b c d e 0 0.945686 0.000710 0.909158 0.892892 0.326670 1 0.919359 0.667057 0.462478 0.008204 0.473096 2 0.976163 0.621712 0.208423 0.980471 0.048334 3 0.459039 0.788318 0.309892 0.100539 0.753992
tôi muốn chỉ những hàng mà giá trị cho cột 'c' là lớn hơn 0,5, nhưng tôi chỉ cần cột 'b' và 'e' cho những hàng đó.
Đây là phương pháp mà tôi đã đưa ra - có lẽ có một cách "tốt hơn" gấu trúc?
locs = [df.columns.get_loc(_) for _ in ['a', 'd']] print df[df.c > 0.5][locs] a d 0 0.945686 0.892892
mục tiêu cuối cùng của tôi là để chuyển đổi kết quả vào một mảng NumPy để vượt qua thành một thuật toán hồi quy sklearn, vì vậy tôi sẽ sử dụng đoạn mã trên như thế này:
training_set = array(df[df.c > 0.5][locs])
... và rằng Peeves tôi kể từ khi tôi kết thúc với một bản sao mảng lớn trong bộ nhớ. Có lẽ có một cách tốt hơn cho điều đó?
Thanh lịch nhất. Sự khác biệt giữa .ix và .loc là gì? –
loc sẽ không cố gắng sử dụng một số (ví dụ 1) làm đối số vị trí ở tất cả (và sẽ tăng lên); xem tài liệu gấu trúc chính/chọn dữ liệu – Jeff