উত্তর:
যদি তারিখ কলামটি সূচক হয় , তবে লেবেল ভিত্তিক সূচকের জন্য .loc অথবা অবস্থানগত সূচকের জন্য .iloc ব্যবহার করুন।
উদাহরণ স্বরূপ:
df.loc['2014-01-01':'2014-02-01']
বিস্তারিত এখানে দেখুন http://pandas.pydata.org/pandas-docs/stable/dsintro.html#indexing-selection
কলামটি যদি সূচক না হয় তবে আপনার দুটি পছন্দ আছে:
df[(df['date'] > '2013-01-01') & (df['date'] < '2013-02-01')]
সাধারণ ব্যাখ্যা জন্য এখানে দেখুন
দ্রষ্টব্য: .ix হ্রাস করা হয়েছে।
query
এখানেও ব্যবহার করতে পারেন । df.query('20130101 < date < 20130201')
।
.loc
এবং এর মাধ্যমে .ix
) এবং আপনার উদাহরণগুলিতে কলাম সমতুল্য নয়। df.ix['2014-01-01':'2014-02-01']
অন্তর্ভুক্ত 2014-02-01
করার সময় df[(df['date'] > '2013-01-01') & (df['date'] < '2013-02-01')]
অন্তর্ভুক্ত নয় 2013-02-01
, এটি শুধুমাত্র পর্যন্ত সারি ম্যাচ হবে 2013-01-31
।
পূর্ববর্তী উত্তরটি আমার অভিজ্ঞতায় সঠিক নয়, আপনি এটিকে একটি সাধারণ স্ট্রিং পাস করতে পারবেন না, একটি ডেটটাইম অবজেক্ট হওয়া দরকার। তাই:
import datetime
df.loc[datetime.date(year=2014,month=1,day=1):datetime.date(year=2014,month=2,day=1)]
এবং যদি আপনার তারিখগুলি ডেটটাইম প্যাকেজ আমদানি করে মানক করা হয়, আপনি কেবল ব্যবহার করতে পারেন:
df[(df['date']>datetime.date(2016,1,1)) & (df['date']<datetime.date(2016,3,1))]
ডেটটাইম প্যাকেজ ব্যবহার করে আপনার তারিখের স্ট্রিং মানক করার জন্য, আপনি এই ফাংশনটি ব্যবহার করতে পারেন:
import datetime
datetime.datetime.strptime
df[(df['date']>pd.Timestamp(2016,1,1)) & (df['date']<pd.Timestamp(2016,3,1))]
।
যদি আপনার ডেটটাইম কলামে পান্ডার ডেটটাইম টাইপ থাকে (যেমন datetime64[ns]
), সঠিক ফিল্টারিংয়ের জন্য আপনার পিডি প্রয়োজন need টাইমস্ট্যাম্প অবজেক্ট , উদাহরণস্বরূপ:
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]
তারিখগুলি যদি সূচকে থাকে তবে সহজভাবে:
df['20160101':'20160301']
আপনি একটি ক্যোয়ারী এবং স্থানীয় রেফারেন্স সম্পাদন করতে পিডিটাইমস্ট্যাম্প ব্যবহার করতে পারেন
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
ডেটাফ্রেম.কোয়ারির জন্য পান্ডাস ডকুমেন্টেশনগুলি দেখুন , বিশেষত স্থানীয় ভেরিয়েবিল রেফারেন্স করা উডসিং @
উপসর্গ সম্পর্কে উল্লেখ । এই ক্ষেত্রে আমরা টাইমস্ট্যাম্প স্ট্রিং সরবরাহ করতে সক্ষম হতে pd.Timestamp
স্থানীয় উপনামটি ব্যবহার করে উল্লেখ করিts
সুতরাং সিএসভি ডেটা ফাইল লোড করার সময়, তারিখের একটি পরিসরের উপর ভিত্তি করে ডেটা ফিল্টার করার জন্য আমাদের এখন নীচে হিসাবে সূচী হিসাবে তারিখ কলাম সেট করতে হবে। এখন অবহেলিত পদ্ধতির জন্য এটির দরকার হয়নি: পিডি.ডাটাফ্রেম.ফ্রম_সিএসভি ()।
আপনি যদি জানু থেকে ফেব্রুয়ারী, যেমন 2020-01-01 থেকে 2020-02-29 পর্যন্ত দুই মাসের জন্য ডেটা প্রদর্শন করতে চান তবে আপনি এটি করতে পারেন:
import pandas as pd
mydata = pd.read_csv('mydata.csv',index_col='date') # or its index number, e.g. index_col=[0]
mydata['2020-01-01':'2020-02-29'] # will pull all the columns
#if just need one column, e.g. Cost, can be done:
mydata['2020-01-01':'2020-02-29','Cost']
এটি পাইথন ৩.7 এর জন্য কাজ করে পরীক্ষা করা হয়েছে। আশা করি আপনি এটি দরকারী পাবেন।
index_col
string
একটি তালিকা হতে হবে না। mydata = pd.read_csv('mydata.csv',index_col='date')
তারিখ অনুসারে আপনার ডেটা ফ্রেম ফিল্টার করার সবচেয়ে সংক্ষিপ্ততম উপায়: ধরা যাক আপনার তারিখ কলামটি টাইমটাইম টাইম টাইম 64 [এনএস]
# filter by single day
df = df[df['date'].dt.strftime('%Y-%m-%d') == '2014-01-01']
# filter by single month
df = df[df['date'].dt.strftime('%Y-%m') == '2014-01']
# filter by single year
df = df[df['date'].dt.strftime('%Y') == '2014']
আমাকে এখনও কোনও মন্তব্য লেখার অনুমতি নেই, সুতরাং আমি একটি উত্তর লিখব, যদি কেউ এই সমস্তটি পড়ে এবং এটিতে পৌঁছায়।
যদি ডেটাসেটের সূচি তারিখের সময় হয় এবং আপনি যেগুলি ফিল্টার করতে চান (উদাহরণস্বরূপ) কয়েক মাসের মধ্যে, আপনি নিম্নলিখিতটি করতে পারেন:
df.loc[df.index.month = 3]
এটি মার্চ মাসের মধ্যে আপনার জন্য ডেটাসেট ফিল্টার করবে।
আপনি যদি ইতিমধ্যে পিডি.টো_ডেটটাইম ব্যবহার করে স্ট্রিংটিকে তারিখ বিন্যাসে রূপান্তর করেন তবে আপনি কেবল ব্যবহার করতে পারেন:
df = df[(df['Date']> "2018-01-01") & (df['Date']< "2019-07-01")]
আপনি কেবলমাত্র সময় সীমাটি নির্বাচন করে বেছে নিতে পারেন: df.loc ['start_date': 'end_date']