본문 바로가기
파이썬

파이썬 두 날짜 사이의 DataFrame 행 선택

by º기록 2020. 11. 25.
반응형

다음과 같이 csv에서 DataFrame을 만들고 있습니다.

stock = pd.read_csv('data_in/' + filename + '.csv', skipinitialspace=True)

DataFrame에는 날짜 열이 있습니다. 지정된 날짜 범위 또는 지정된 두 날짜 값 사이에있는 날짜 값이있는 행만 포함하는 새 DataFrame을 만들거나 기존 데이터 프레임을 덮어 쓰는 방법이 있습니까?

 

해결 방법

 

두 가지 가능한 솔루션이 있습니다.

부울 마스크 사용 :

df [ 'date'] 가 dtype이 datetime64 [ns] 인 시리즈인지 확인합니다.

df['date'] = pd.to_datetime(df['date'])  

부울 마스크를 만듭니다. start_date end_date datetime.datetime s 일 수 있습니다. np.datetime64 s, pd.Timestamp s 또는 datetime 문자열 :

#greater than the start date and smaller than the end date
mask = (df['date'] > start_date) & (df['date'] <= end_date)

하위 DataFrame을 선택합니다.

df.loc[mask]

또는 df 에 다시 할당

df = df.loc[mask]

예를 들면

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.random((200,3)))
df['date'] = pd.date_range('2000-1-1', periods=200, freq='D')
mask = (df['date'] > '2000-6-1') & (df['date'] <= '2000-6-10')
print(df.loc[mask])

수확량

            0         1         2       date
153  0.208875  0.727656  0.037787 2000-06-02
154  0.750800  0.776498  0.237716 2000-06-03
155  0.812008  0.127338  0.397240 2000-06-04
156  0.639937  0.207359  0.533527 2000-06-05
157  0.416998  0.845658  0.872826 2000-06-06
158  0.440069  0.338690  0.847545 2000-06-07
159  0.202354  0.624833  0.740254 2000-06-08
160  0.465746  0.080888  0.155452 2000-06-09
161  0.858232  0.190321  0.432574 2000-06-10


날짜별로 많은 선택을하려는 경우에는 설정하는 것이 더 빠를 수 있습니다. date column as the index first. Then you can select rows by date using 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('2000-1-1', periods=200, freq='D')
df = df.set_index(['date'])
print(df.loc['2000-6-1':'2000-6-10'])

수확량

                   0         1         2
date                                    
2000-06-01  0.040457  0.326594  0.492136    # <- includes start_date
2000-06-02  0.279323  0.877446  0.464523
2000-06-03  0.328068  0.837669  0.608559
2000-06-04  0.107959  0.678297  0.517435
2000-06-05  0.131555  0.418380  0.025725
2000-06-06  0.999961  0.619517  0.206108
2000-06-07  0.129270  0.024533  0.154769
2000-06-08  0.441010  0.741781  0.470402
2000-06-09  0.682101  0.375660  0.009916
2000-06-10  0.754488  0.352293  0.339337

파이썬 목록 인덱싱 동안, 예 : seq [start : end] start 를 포함하지만 end 는 포함하지 않습니다. 반면에 Pandas df.loc [start_date : end_date] 는 색인에있는 경우 결과에 둘 다 끝점을 포함합니다. 그러나 start_date end_date 모두 색인에있을 필요는 없습니다.


 

참조 페이지 https://stackoverflow.com/questions/29370057

 

 

반응형

댓글