2014-04-06 40 views
32

Tôi có khung dữ liệu gấu trúc có cột 'ngày'. Bây giờ tôi cần phải lọc ra tất cả các hàng trong dataframe có ngày bên ngoài của hai tháng tiếp theo. Về cơ bản, tôi chỉ cần giữ lại hàng trong vòng hai tháng tới. Cách tốt nhất để đạt được điều này là gì.lọc các khung dữ liệu gấu trúc vào các ngày

Trả lời

74

Nếu đó là chỉ mục, bạn nên sử dụng công cụ chọn .ix hoặc .loc.

Ví dụ:

df.ix['2014-01-01':'2014-02-01'] 

Xem chi tiết tại đây http://pandas.pydata.org/pandas-docs/stable/dsintro.html#indexing-selection

Tôi đoán đó là thông minh để đọc lên trên gấu trúc khá rộng rãi trước khi bạn bắt đầu, vì nó là một thư viện rất mạnh mẽ. Nếu không, sẽ rất khó để có được bất cứ điều gì có ý nghĩa thực hiện.

UPDATE:

Nếu cột không phải là chỉ số bạn có hai lựa chọn:

  1. Làm cho nó chỉ số (tạm thời hoặc vĩnh viễn nếu nó dữ liệu chuỗi thời gian)
  2. df[(df['date'] > '2013-01-01') & (df['date'] < '2013-02-01')]

Xem here để được giải thích chung

+1

Cảm ơn bạn, sẽ đọc. Ngày tháng là một cột riêng biệt và không phải là chỉ mục trong trường hợp của tôi. Có lẽ tôi nên cho thông tin đó ngay từ đầu. Câu hỏi của tôi không phải là rất nhiều thông tin. – AMM

+0

đã cập nhật câu trả lời của tôi cho tài khoản để lọc cột ngày – Retozi

+11

Bạn cũng có thể sử dụng 'truy vấn 'ở đây. 'df.query ('20130101

24

Câu trả lời trước đó không đúng trong kinh nghiệm của tôi, bạn không thể chuyển nó thành một chuỗi đơn giản, cần phải là đối tượng datetime. Vì vậy:

import datetime 
df.ix[datetime.date(year=2014,month=1,day=1):datetime.date(year=2014,month=2,day=1)] 
+4

Tôi hoàn toàn có thể vượt qua một chuỗi không có vấn đề gì. – Ninjakannon

+5

Chỉ mục ix không được dùng nữa, hãy sử dụng loc - http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated – Nick

6

Nếu ngày có trong chỉ mục sau đó chỉ cần:

df['20160101':'20160301'] 
+0

Câu trả lời hay! Hoạt động hoàn hảo khi bạn đã lập chỉ mục ngày. – arjones

11

Và nếu ngày của bạn được chuẩn hóa bằng cách nhập gói datetime, bạn chỉ có thể sử dụng:

df[(df['date']>datetime.date(2016,1,1)) & (df['date']<datetime.date(2016,3,1))] 

Đối chuẩn hóa chuỗi ngày tháng bằng gói datetime, bạn có thể sử dụng chức năng này:

import datetime 
datetime.datetime.strptime 
Các vấn đề liên quan