날짜별 Panda DataFrames 필터링
날짜 열이 있는 판다 데이터 프레임이 있습니다.이제 DataFrame에서 향후 2개월 이외의 날짜가 있는 모든 행을 필터링해야 합니다.기본적으로, 앞으로 두 달 안에 행만 유지하면 됩니다.
이를 실현하는 가장 좋은 방법은 무엇입니까?
날짜 열이 인덱스인 경우 레이블 기반 인덱싱에는 .loc를, 위치 인덱싱에는 .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는 권장되지 않습니다.
이전 답변은 내 경험에 비추어 볼 때 정확하지 않습니다. 단순한 문자열은 전달할 수 없습니다. 날짜별 개체여야 합니다.그래서:
import datetime
df.loc[datetime.date(year=2014,month=1,day=1):datetime.date(year=2014,month=2,day=1)]
또한 datetime 패키지를 Import하여 날짜를 표준화할 경우 다음과 같이 간단히 사용할 수 있습니다.
df[(df['date']>datetime.date(2016,1,1)) & (df['date']<datetime.date(2016,3,1))]
datetime 패키지를 사용하여 날짜 문자열을 표준화하는 경우 다음 함수를 사용할 수 있습니다.
import datetime
datetime.datetime.strptime
pd.to_datetime을 사용하여 문자열을 날짜 형식으로 변환한 경우 다음을 사용할 수 있습니다.
df = df[(df['Date'] > "2018-01-01") & (df['Date'] < "2019-07-01")]
datetime 열에 Panda datetime 유형이 있는 경우(예:datetime64[ns]
적절한 필터링을 위해서는 pd가 필요합니다.타임스탬프 개체. 예:
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]
데이터 프레임을 날짜별로 필터링하는 가장 빠른 방법은 다음과 같습니다.날짜 열이 datetime64[ns] 유형이라고 가정합니다.
# filter by single day
df_filtered = df[df['date'].dt.strftime('%Y-%m-%d') == '2014-01-01']
# filter by single month
df_filtered = df[df['date'].dt.strftime('%Y-%m') == '2014-01']
# filter by single year
df_filtered = df[df['date'].dt.strftime('%Y') == '2014']
날짜가 인덱스에 있는 경우, 간단히 다음과 같이 하십시오.
df['20160101':'20160301']
PD를 쓰시면 됩니다.쿼리 및 로컬 참조를 수행하기 위한 타임스탬프
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용 Panda 문서를 참조하십시오.query, 특히 로컬바일레퍼런스 udsing에 대한 언급@
, 우리는 이이음음음음 음 、 음 、 음 음 、 음 、 음 음 음 음 。pd.Timestamp
에일리어스 사용ts
을 할 수
저는 아직 댓글을 쓸 수 없기 때문에누군가 다 읽고 이거에 접속해주시면 제가 답장을 쓸게요
데이터 세트의 인덱스가 날짜/시간이고 이를 (예를 들어) 개월 단위로 필터링하려는 경우 다음을 수행할 수 있습니다.
df.loc[df.index.month == 3]
그러면 3월까지 데이터 세트가 필터링됩니다.
따라서 CSV 데이터 파일을 로드할 때 다음과 같이 날짜 열을 인덱스로 설정하여 날짜 범위를 기준으로 데이터를 필터링해야 합니다.현재 권장되지 않는 방법인 pd에는 이 방법이 필요하지 않았습니다.데이터 프레임from_csv 명령어
예를 들어 2020-01-01 ~ 2020-02-29와 같이 1월부터 2월까지 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에서 동작하는 것으로 테스트되고 있습니다.이것이 도움이 되기를 바랍니다.
를 사용하는 것은 어떻습니까?pyjanitor
이목구비가 멋있어요.
끝나고pip install pyjanitor
import janitor
df_filtered = df.filter_date(your_date_column_name, start_date, end_date)
다음 작업을 수행하여 시간 범위를 선택할 수 있습니다.df.loc['start_date':'end_date']
.query() 메서드를 사용하는 경우 다른 솔루션을 사용할 수 있습니다.
트레이드오프에서 .query(f"{start} < MyDate < {end} )와 같은 쓰기 가능한 코드를 사용할 수 있습니다.query()는 문자열을 해석하고 열 값은 팬더 날짜 형식이어야 합니다(따라서 .query()도 이해할 수 있습니다).
df = pd.DataFrame({
'MyValue': [1,2,3],
'MyDate': pd.to_datetime(['2021-01-01','2021-01-02','2021-01-03'])
})
start = datetime.date(2021,1,1).strftime('%Y%m%d')
end = datetime.date(2021,1,3).strftime('%Y%m%d')
df.query(f"{start} < MyDate < {end}")
(@Phillip Cloud의 코멘트에 이어 @Retozi의 답변)
팬더 버전 1.1.3에서는 python datetime 기반 인덱스가 내림차순인 상황이 발생하였습니다.이 경우
df.loc['2021-08-01':'2021-08-31']
빈 상태로 반환되었습니다.반면에.
df.loc['2021-08-31':'2021-08-01']
예상된 데이터를 반환했습니다.
# 60 days from today
after_60d = pd.to_datetime('today').date() + datetime.timedelta(days=60)
# filter date col less than 60 days date
df[df['date_col'] < after_60d]
판다 도서관을 수입하다
판다를 PD로 수입하다
스텝 1: pd.to_datetime() 메서드를 사용하여 날짜 열을 문자열로 변환합니다.
df['date']=pd.to_datetime(df["date"],unit='s')
순서 2: 임의의 방법으로 필터링을 실시합니다(2개월 등, 2개월).
df = df[(df["date"] >"2022-03-01" & df["date"] < "2022-05-03")]
스텝 3: 출력을 확인합니다.
print(df)
언급URL : https://stackoverflow.com/questions/22898824/filtering-pandas-dataframes-on-dates
'itsource' 카테고리의 다른 글
MySQL: 테이블에 레코드가 없는 경우 삽입 (0) | 2022.09.24 |
---|---|
DOM 변경 검출 (0) | 2022.09.24 |
Spring Boot Rest 서비스에서 파일 다운로드 (0) | 2022.09.24 |
PHP XML Nice 형식을 출력하는 방법 (0) | 2022.09.24 |
Sublime Text 2에서 Python 코드를 실행하려면 어떻게 해야 하나요? (0) | 2022.09.24 |