[python] 날짜 별 팬더 데이터 프레임 필터링

‘날짜’열이있는 Pandas DataFrame이 있습니다. 이제 앞으로 2 개월이 지난 날짜가있는 DataFrame의 모든 행을 필터링해야합니다. 본질적으로 앞으로 2 개월 이내에있는 행만 유지하면됩니다.

이것을 달성하는 가장 좋은 방법은 무엇입니까?



답변

경우 날짜 열이 인덱스는 다음 위치 색인 레이블 기반 색인 또는 .iloc에 대한 .loc 사용합니다.

예를 들면 다음과 같습니다.

df.loc['2014-01-01':'2014-02-01']

자세한 내용은 여기를 참조하십시오 http://pandas.pydata.org/pandas-docs/stable/dsintro.html#indexing-selection

열이 색인아닌 경우 두 가지 선택 사항이 있습니다.

  1. 시계열 데이터 인 경우 색인을 임시 또는 영구적으로 작성하십시오.
  2. df[(df['date'] > '2013-01-01') & (df['date'] < '2013-02-01')]

일반적인 설명 은 여기 를 참조 하십시오

참고 : .ix는 더 이상 사용되지 않습니다.


답변

이전 답변이 내 경험에 맞지 않습니다. 간단한 문자열을 전달할 수 없으며 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


답변

날짜 시간 열에 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]


답변

날짜가 색인에 있으면 간단히 다음을 수행하십시오.

df['20160101':'20160301']


답변

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에서 작동하는 것으로 테스트되었습니다. 이 정보가 도움이 되길 바랍니다.