답변:
경우 날짜 열이 인덱스는 다음 위치 색인 레이블 기반 색인 또는 .iloc에 대한 .loc 사용합니다.
예를 들면 다음과 같습니다.
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
.
이전 답변이 내 경험에 맞지 않습니다. 간단한 문자열을 전달할 수 없으며 datetime 객체 여야합니다. 그래서:
import datetime
df.loc[datetime.date(year=2014,month=1,day=1):datetime.date(year=2014,month=2,day=1)]
datetime 패키지를 가져 와서 날짜가 표준화 된 경우 간단히 다음을 사용할 수 있습니다.
df[(df['date']>datetime.date(2016,1,1)) & (df['date']<datetime.date(2016,3,1))]
datetime 패키지를 사용하여 날짜 문자열을 표준화하려면 다음 기능을 사용할 수 있습니다.
import datetime
datetime.datetime.strptime
df[(df['date']>pd.Timestamp(2016,1,1)) & (df['date']<pd.Timestamp(2016,3,1))]
.
날짜 시간 열에 Pandas 날짜 시간 유형 (예 :)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]
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
DataFrame.query 에 대한 팬더 문서 , 특히 로컬 변수 참조 udsing @
접두사에 대한 언급을 살펴보십시오 . 이 경우 타임 스탬프 문자열을 제공 할 수 있도록 pd.Timestamp
로컬 별칭 사용 을 참조 ts
합니다.
따라서 CSV 데이터 파일을로드 할 때 날짜 범위를 기준으로 데이터를 필터링하려면 날짜 열을 아래와 같이 색인으로 설정해야합니다. 더 이상 사용되지 않는 메소드 인 pd.DataFrame.from_csv ()에는 필요하지 않습니다.
1 월에서 2 월까지 (예 : 2020-01-01에서 2020-02-29) 2 개월 동안 데이터를 표시하려면 다음과 같이하십시오.
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']
이것은 Python 3.7에서 작동하는 것으로 테스트되었습니다. 이 정보가 도움이 되길 바랍니다.
index_col
string
목록 이 아니어야합니다. mydata = pd.read_csv('mydata.csv',index_col='date')
날짜별로 데이터 프레임을 필터링하는 가장 짧은 방법 : 날짜 열이 datetime64 [ns] 유형이라고 가정합니다.
# 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 [ 'start_date': 'end_date']를 수행하여 시간 범위를 선택할 수 있습니다.