2013-05-28 38 views
42

Khi chọn một cột đơn từ DataFrame gấu trúc (giả sử df.iloc[:, 0], df['A'] hoặc df.A, v.v.) Khung dữ liệu. Tuy nhiên, tôi đang viết một số hàm lấy DataFrame làm đối số đầu vào. Do đó, tôi thích xử lý với DataFrame một cột thay vì Series để hàm có thể giả định rằng df.columns có thể truy cập được. Ngay bây giờ tôi phải chuyển đổi một cách rõ ràng Series thành một DataFrame bằng cách sử dụng một cái gì đó như pd.DataFrame(df.iloc[:, 0]). Điều này dường như không phải là phương pháp sạch nhất. Có một cách thanh lịch hơn để lập chỉ mục từ một DataFrame trực tiếp sao cho kết quả là một DataFrame một cột thay vì Series?pandas Python: Giữ cột được chọn làm DataFrame thay vì dòng

+6

df.iloc [:, [0]] hoặc df [['A']]; df.A chỉ sẽ trả lại một chuỗi tuy nhiên – Jeff

Trả lời

47

Như @ Jeff đề cập có một vài cách để làm điều này, nhưng tôi khuyên bạn nên sử dụng loc/iloc rõ ràng hơn (và nâng cao lỗi sớm nếu bạn cố gắng một cái gì đó mơ hồ):

In [10]: df = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 'B']) 

In [11]: df 
Out[11]: 
    A B 
0 1 2 
1 3 4 

In [12]: df[['A']] 

In [13]: df[[0]] 

In [14]: df.loc[:, ['A']] 

In [15]: df.iloc[:, [0]] 

Out[12-15]: # they all return the same thing: 
    A 
0 1 
1 3 

Sau hai lựa chọn loại bỏ sự mơ hồ trong trường hợp tên cột số nguyên (chính xác là tại sao loc/iloc được tạo ra). Ví dụ:

In [16]: df = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 0]) 

In [17]: df 
Out[17]: 
    A 0 
0 1 2 
1 3 4 

In [18]: df[[0]] # ambiguous 
Out[18]: 
    A 
0 1 
1 3 
+2

Xin lỗi vì đã làm phiền bạn, nhưng chỉ là một câu hỏi thực sự nhanh chóng xung quanh vấn đề này. Tôi thấy cách thêm '[]' làm cho kết quả là một 'DataFrame' thay vì một' Series', nhưng ở đâu trong tài liệu gấu trúc là kiểu cú pháp lập chỉ mục này được thảo luận? Tôi chỉ cố gắng lấy tên "chính thức" cho kỹ thuật lập chỉ mục này để tôi thực sự hiểu nó. Cám ơn! –

+2

@sparc_spread http://pandas.pydata.org/pandas-docs/stable/indexing.html#basics "Bạn có thể chuyển danh sách các cột vào [] để chọn cột theo thứ tự đó". Tôi không chắc chắn nếu điều này có một tên! –

+0

Có vẻ như nó không có - nhưng tôi sẽ tiếp tục sử dụng nó từ bây giờ. Tuyệt vời bao nhiêu thứ được chôn trong cả API và tài liệu. Cám ơn! –

Các vấn đề liên quan