اذهب إلى المحتوى
  • 0

إختيار الصفوف بين فترتين من التاريخ في pandas

Mohamed Elnemr

السؤال

لدي بيانات على هيئة dataframe بحيث أن بها عمود به التاريخ.

هل هناك طريقة لإختيار عدد من الأعمدة بين تاريخين معينين ، كالفترة بين  1/9/2021 و 10/9/2021؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

يمكنك القيام بذلك كالتالي:

import numpy as np   
import pandas as pd
# إنشاء داتا فريم ببيانات عشوائية
df = pd.DataFrame(np.random.random((10, 2)))
df['date'] = pd.date_range('2017-1-1', periods=10, freq='D')
df
"""
        0 	      1     	date
0 	0.398304 	0.199462 	2017-01-01
1 	0.298642 	0.960583 	2017-01-02
2 	0.172924 	0.955810 	2017-01-03
3 	0.802121 	0.691403 	2017-01-04
4 	0.584322 	0.949568 	2017-01-05
5 	0.499019 	0.667226 	2017-01-06
6 	0.069219 	0.153963 	2017-01-07
7 	0.951769 	0.758855 	2017-01-08
8 	0.485271 	0.415563 	2017-01-09
9 	0.330080 	0.561897 	2017-01-10
"""
# سنختار البيانات التي تقع ضمن التاريخ 
# "2017-01-3", "2017-01-6"
range = df[df["date"].isin(pd.date_range("2017-01-3", "2017-01-6"))]
range
"""
      0 	      1       	date
2 	0.722369 	0.145827 	2017-01-03
3 	0.540575 	0.378795 	2017-01-04
4 	0.341897 	0.406917 	2017-01-05
5 	0.919453 	0.810913 	2017-01-06
"""

أو الحل الأبسط وهو إنشاء استعلام كالتالي:

start_date, end_date = "2017-01-3", "2017-01-6"
df.query('date >= @start_date and date <= @end_date')
"""
      0 	      1       	date
2 	0.722369 	0.145827 	2017-01-03
3 	0.540575 	0.378795 	2017-01-04
4 	0.341897 	0.406917 	2017-01-05
5 	0.919453 	0.810913 	2017-01-06
"""

أو يمكنك استخدام df.loc بعد أن تحدد له البداية والنهاية كالتالي:

start = df[df['date']=='2017-01-03'].index[0]
end = df[df['date']=='2017-01-6'].index[0]
df.loc[start:end]
"""
      0       	1       	date
2 	0.722369 	0.145827 	2017-01-03
3 	0.540575 	0.378795 	2017-01-04
4 	0.341897 	0.406917 	2017-01-05
5 	0.919453 	0.810913 	2017-01-06
"""

 

تم التعديل في بواسطة Ali Haidar Ahmad
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

في البداية عليك أن تتاكد أن عمود التاريخ على هيئة datetime كالتالي:

df['date'] = pd.to_datetime(df['date'])  

بعد ذلك تختار الفترة التي تريد اختيار الصفوف بينها كالتالي:


mask = (df['date'] > start_date) & (df['date'] <= end_date)

مثال على البيانات الخاصة بك، يمكنك اختبار الكود التالي:

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.random((200,3)))
df['date'] = pd.date_range('2021-1-1', periods=200, freq='D')
mask = (df['date'] > '2021-9-1') & (df['date'] <= '2021-9-10')
print(df.loc[mask])

ويكون الخرج كالتالي:

            0         1         2       date
153  0.208875  0.727656  0.037787 2021-09-02
154  0.750800  0.776498  0.237716 2021-09-03
155  0.812008  0.127338  0.397240 2021-09-04
156  0.639937  0.207359  0.533527 2021-09-05
157  0.416998  0.845658  0.872826 2021-09-06
158  0.440069  0.338690  0.847545 2021-09-07
159  0.202354  0.624833  0.740254 2021-09-08
160  0.465746  0.080888  0.155452 2021-09-09
161  0.858232  0.190321  0.432574 2021-09-10

أو يمكنك الدالة df.loc[start_date:end_date] لاختيار الفترة التي تريدها كالتالي:

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.random((200,3)))
df['date'] = pd.date_range('2021-1-1', periods=200, freq='D')
df = df.set_index(['date'])
print(df.loc['2021-9-1':'2021-9-10'])

ويكون لها نفس الخرج كالدالة السابقة.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...