it-swarm.dev

تصفية الباندا DataFrames في التواريخ

لديّ DataFrame من Pandas مع عمود "تاريخ". أحتاج الآن إلى تصفية جميع الصفوف في DataFrame التي لها تواريخ خارج الشهرين المقبلين. في الأساس ، لا أحتاج إلا إلى الاحتفاظ بالصفوف الموجودة خلال الشهرين المقبلين.

ما هي أفضل طريقة لتحقيق ذلك؟

84
AMM

إذا كان عمود التاريخ هو الفهرس ، فاستخدم .loc للفهرسة القائمة على التصنيف أو .iloc لفهرسة الموضع.

فمثلا:

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

انظر التفاصيل هنا http://pandas.pydata.org/pandas-docs/stable/dsintro.html#indexing-selection

إذا كان العمود ليس الفهرس لديك خياران:

  1. اجعله الفهرس (إما مؤقتًا أو دائمًا إذا كانت بيانات السلاسل الزمنية)
  2. df[(df['date'] > '2013-01-01') & (df['date'] < '2013-02-01')]

انظر هنا للاطلاع على التفسير العام

ملاحظة: .ix مهملة.

142
Retozi

الجواب السابق غير صحيح في تجربتي ، لا يمكنك تمريره سلسلة بسيطة ، يجب أن يكون كائن تاريخ. وبالتالي:

import datetime 
df.loc[datetime.date(year=2014,month=1,day=1):datetime.date(year=2014,month=2,day=1)]
32
orange1

وإذا كانت تواريخك موحدة عن طريق استيراد حزمة تاريخ ووقت ، فيمكنك ببساطة استخدام:

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

لتوحيد سلسلة التاريخ باستخدام حزمة التاريخ والوقت ، يمكنك استخدام هذه الوظيفة:

import datetime
datetime.datetime.strptime
24
shm2008

إذا كان عمود وقتك يحتوي على نوع وقت بانداس (على سبيل المثال ، datetime64[ns]) ، فلكي تحتاج إلى تصفية مناسبة ، تحتاج إلى كائن pd.Timestamp ، على سبيل المثال:

from datetime import date

import pandas as pd

value_to_check = pd.Timestamp(date.today().year, 1, 1)
filter_mask = df['date_column'] < value_to_check
filtered_df = df[filter_mask]
13
VMAtm

إذا كانت التواريخ موجودة في الفهرس ، فما عليك سوى:

df['20160101':'20160301']
10
fantabolous

يمكنك استخدام pd.Timestamp لإجراء استعلام ومرجع محلي

import pandas as pd
import numpy as np

df = pd.DataFrame()
ts = pd.Timestamp

df['date'] = np.array(np.arange(10) + datetime.now().timestamp(), dtype='M8[s]')

print(df)
print(df.query('date > @ts("20190515T071320")')

مع الإخراج

                 date
0 2019-05-15 07:13:16
1 2019-05-15 07:13:17
2 2019-05-15 07:13:18
3 2019-05-15 07:13:19
4 2019-05-15 07:13:20
5 2019-05-15 07:13:21
6 2019-05-15 07:13:22
7 2019-05-15 07:13:23
8 2019-05-15 07:13:24
9 2019-05-15 07:13:25


                 date
5 2019-05-15 07:13:21
6 2019-05-15 07:13:22
7 2019-05-15 07:13:23
8 2019-05-15 07:13:24
9 2019-05-15 07:13:25
0
danielhrisca