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

السؤال

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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...