2015-02-20 28 views
10

Tôi đang cố gắng xóa các hàng của một khung dữ liệu dựa trên một cột ngày; [Delivery Date]Pandas - Python, xóa các hàng dựa trên cột Ngày

Tôi cần phải xóa các hàng cũ hơn 6 tháng nhưng không bằng năm '1970'.

tôi đã tạo ra 2 biến:

from datetime import date, timedelta 
sixmonthago = date.today() - timedelta(188) 

import time 
nineteen_seventy = time.strptime('01-01-70', '%d-%m-%y') 

nhưng tôi không biết làm thế nào để xóa hàng dựa trên hai biến, sử dụng cột [Delivery Date].

Có ai có thể cung cấp giải pháp đúng không?

Trả lời

8

Bạn chỉ có thể lọc chúng ra:

df[(df['Delivery Date'].dt.year == 1970) | (df['Delivery Date'] >= sixmonthago)] 

này trả về tất cả các hàng nơi năm là 1970 hoặc ngày ít hơn 6 tháng.

Bạn có thể sử dụng lập chỉ mục boolean và chuyển nhiều điều kiện để lọc df, cho nhiều điều kiện bạn cần sử dụng toán tử mảng sao cho | thay vì or và dấu ngoặc đơn.

Kiểm tra các tài liệu cho một lời giải thích của boolean indexing

+0

Cảm ơn .. Tôi nhận được một lỗi trở lại: Lỗi Loại: 'Chỉ có thể sử dụng accessor .dt với các giá trị datetimelike '- có lẽ cần câu hỏi riêng biệt của riêng nó nhưng điều này có nghĩa là tôi phải thay đổi [Ngày giao hàng] thành datetime? Xin lỗi, tôi khá mới với điều này –

+0

Bạn mave có chuỗi thay vì datetimes, bạn có thể chuyển đổi làm 'df ['Ngày giao hàng'] = pd.to_datetime (df ['Ngày giao hàng'])' – EdChum

2

Hãy chắc chắn việc tính toán riêng của mình là chính xác cho "6 tháng" trước. Bạn có thể không muốn mã hóa cứng trong 188 ngày. Không phải tất cả các tháng đều được thực hiện như nhau.

from datetime import date 
from dateutil.relativedelta import relativedelta 

#http://stackoverflow.com/questions/546321/how-do-i-calculate-the-date-six-months-from-the-current-date-using-the-datetime 
six_months = date.today() - relativedelta(months = +6) 

Sau đó, bạn có thể áp dụng logic sau.

import time 
nineteen_seventy = time.strptime('01-01-70', '%d-%m-%y') 

df = df[(df['Delivery Date'].dt.year == nineteen_seventy.tm_year) | (df['Delivery Date'] >= six_months)] 

Nếu bạn thực sự muốn thả các phần của dataframe, bạn có thể làm như sau:

df = df[(df['Delivery Date'].dt.year != nineteen_seventy.tm_year) | (df['Delivery Date'] < six_months)].drop(df.columns) 
+1

hey this is return the lỗi: drop() mất ít nhất 2 đối số, 1 được cho là –

+0

... sẽ tốt để thực hiện ngay bây giờ. – andrewwowens

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