Mohamed Elnemr نشر 2 سبتمبر 2021 أرسل تقرير نشر 2 سبتمبر 2021 لدي بيانات على هيئة dataframe بحيث أن بها عمود به التاريخ. هل هناك طريقة لإختيار عدد من الأعمدة بين تاريخين معينين ، كالفترة بين 1/9/2021 و 10/9/2021؟ 1 اقتباس
0 Ali Haidar Ahmad نشر 2 سبتمبر 2021 أرسل تقرير نشر 2 سبتمبر 2021 (معدل) يمكنك القيام بذلك كالتالي: 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 """ تم التعديل في 2 سبتمبر 2021 بواسطة Ali Haidar Ahmad اقتباس
0 Ahmed Sharshar نشر 2 سبتمبر 2021 أرسل تقرير نشر 2 سبتمبر 2021 في البداية عليك أن تتاكد أن عمود التاريخ على هيئة 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']) ويكون لها نفس الخرج كالدالة السابقة. 1 اقتباس
السؤال
Mohamed Elnemr
لدي بيانات على هيئة dataframe بحيث أن بها عمود به التاريخ.
هل هناك طريقة لإختيار عدد من الأعمدة بين تاريخين معينين ، كالفترة بين 1/9/2021 و 10/9/2021؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.