2015-10-29 29 views

Trả lời

26

Đối với các đối tượng gấu trúc (Series, DataFrame), toán tử chỉ mục [] chỉ chấp nhận

  1. colname hoặc danh sách các tên màu để chọn (các) cột
  2. cắt hoặc mảng Boolean để chọn (các) hàng, nghĩa là nó chỉ đề cập đến một chiều của khung dữ liệu.

Đối với df[[colname(s)]], dấu ngoặc đơn bên trong là danh sách và khung bên ngoài là toán tử lập chỉ mục, tức là bạn phải sử dụng dấu ngoặc kép nếu bạn chọn hai hoặc nhiều cột. Với một tên cột, một cặp dấu ngoặc đơn trả về một Chuỗi, trong khi dấu ngoặc kép trả về một khung dữ liệu.

Ngoài ra, df.ix[df['A'] < 3,['A','C']] hoặc df.loc[df['A'] < 3,['A','C']] tốt hơn lựa chọn chuỗi để tránh trả lại bản sao so với chế độ xem của khung dữ liệu.

Vui lòng tham khảo pandas documentation để biết chi tiết

+1

Cảm ơn bạn. Tôi sẽ chọn cái này vì nó đi sâu vào một số chi tiết liên quan đến mục đích của các khung bên ngoài, điều này làm tôi bối rối. Như bạn đã đề cập, tôi sẽ bắt đầu sử dụng .ix mà làm cho tinh thần/đọc tốt hơn cho tôi. – FortuneFaded

5

Bởi vì bạn không có cột tên 'A','C', đó là những gì bạn muốn được cố gắng làm mà sẽ nâng cao một KeyError, vì vậy bạn phải sử dụng một iterable để phụ chọn từ df.

Vì vậy

df[df['A'] < 3]['A','C'] 

tăng

KeyError: ('A', 'C')

Đó là khác nhau để

In [261]: 
df[df['A'] < 3][['A','C']] 

Out[261]: 
    A C 
0 0 1 
1 2 5 

Đây không phải là khác nhau để cố gắng:

df['A','C'] 

vì vậy tại sao bạn cần đôi dấu ngoặc vuông:

df[['A','C']] 

Lưu ý rằng cách hiện đại là sử dụng .ix:

In [264]: 
df.ix[df['A'] < 3,['A','C']] 

Out[264]: 
    A C 
0 0 1 
1 2 5 

Vì vậy mà bạn đang hoạt động trên một cái nhìn chứ không phải là khả năng một bản sao

+0

Cảm ơn bạn. Khi đặt nó ở dạng .ix nó có ý nghĩa hơn nhiều. Tôi đã bị ném ra bởi những gì các dấu ngoặc kép có nghĩa là. – FortuneFaded

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