Python DataFrame 시간 데이터 시간 지정해서 추출 방법

pandas에서 데이터를 날짜와 시간을 포함해 사용하는 경우, 특정 시간을 행을 추출하는 방법을 알아보겠습니다.

특정 시간의 데이터 행을 추출하기 위해서는 at_time()과 between_time() 메서드를 사용합니다.

at_time과 between_time를 간단하게 먼저 살펴보면 아래와 같습니다.

  • at_time() – 특정 시간 지정
  • between_time() – 특정 시전대를 지정

 

 

at_time – 특정 시간을 지정

DataFrame에 특정 시간을 지정해 데이터 행을 출력하는 at_time 사용 방법을 보겠습니다.

import pandas as pd
import datetime

i = pd.date_range('2021-01-01', periods=6, freq='8H')

# 날짜와 시간을 가진 샘플 데이터 생성
df = pd.DataFrame({'A': [0,1,2,3,4,5]},index=i)

# DataFrame에 생성한 샘플 데이터
#                      A
# 2021-01-01 00:00:00  0
# 2021-01-01 08:00:00  1
# 2021-01-01 16:00:00  2
# 2021-01-02 00:00:00  3
# 2021-01-02 08:00:00  4
# 2021-01-02 16:00:00  5

# 8시 0분 0초 데이터 행을 추출
print(df.at_time(datetime.time(8, 0, 0)))

 

결과

                     A
2021-01-01 08:00:00  1
2021-01-02 08:00:00  4

 

datetime.time()에 8시 0분 0초를 지정해 해당 시간의 데이터를 추출하고 있습니다.

at_time()을 사용해 검색하는 경우, datetime형태의 인덱스만 검색이 가능합니다.

인덱스가 날짜 형태라도 데이터 타입이 문자열일 경우에는 사용할 수 없습니다.

at_time()에 지정하는 파라미터는 문자열도 사용할 수 있습니다.

import pandas as pd
import datetime

i = pd.date_range('2021-01-01', periods=6, freq='8H')

# 날짜와 시간을 가진 샘플 데이터 생성
df = pd.DataFrame({'A': [0,1,2,3,4,5]},index=i)

# DataFrame에 생성한 샘플 데이터
#                      A
# 2021-01-01 00:00:00  0
# 2021-01-01 08:00:00  1
# 2021-01-01 16:00:00  2
# 2021-01-02 00:00:00  3
# 2021-01-02 08:00:00  4
# 2021-01-02 16:00:00  5

print(df.at_time('16:00'))
print('------------------------')
print(df.at_time('4PM'))

 

결과

                     A
2021-01-01 16:00:00  2
2021-01-02 16:00:00  5
------------------------
                     A
2021-01-01 16:00:00  2
2021-01-02 16:00:00  5

 

오후 4시를 16:00과 4PM 형식으로 지정해 해당 데이터만 값을 추출했습니다.

at_time()의 검색 결과가 없는 경우에는 공백의 pandas.DataFrame이 반환됩니다.

 

between_time – 특정 시간대 지정

DataFrame에 특정 시간대 데이터 행을 출력하는 between_time 사용 방법을 보겠습니다.

import pandas as pd
import datetime

i = pd.date_range('2021-01-01', periods=6, freq='8H5s')

# 날짜와 시간을 가진 샘플 데이터 생성
df = pd.DataFrame({'A': [0,1,2,3,4,5]},index=i)

# DataFrame에 생성한 샘플 데이터
#                      A
# 2021-01-01 00:00:00  0
# 2021-01-01 08:00:05  1
# 2021-01-01 16:00:10  2
# 2021-01-02 00:00:15  3
# 2021-01-02 08:00:20  4
# 2021-01-02 16:00:25  5

print(df.between_time('8:00:00', '8:00:30'))

 

결과

                     A
2021-01-01 08:00:05  1
2021-01-02 08:00:20  4

 

8시부터 8시 0분 30초까지 시간 범위를 지정해 데이터를 출력했습니다.

출력된 데이터는 8시 0분 10초 데이터와 8시 0분 20초 데이터가 추출되었습니다.

at_time()은 시분초가 정확히 일치하는 데이터만 추출하지만 between_time()은 시간 범위를 지정해 해당되는 데이터를 모두 추출합니다.

기본적으로 between_time에는 시작 시간과 종료 시간을 지정해 범위를 만들어서 사용합니다.

between_time() 지정한 시작시간 또는 종료 시간을 포함하고 싶지 않은 경우에는 include_start 또는 include_endFalse로 설정합니다.

import pandas as pd
import datetime

i = pd.date_range('2021-01-01', periods=6, freq='8H5s')

# 날짜와 시간을 가진 샘플 데이터 생성
df = pd.DataFrame({'A': [0,1,2,3,4,5]},index=i)

# DataFrame에 생성한 샘플 데이터
#                      A
# 2021-01-01 00:00:00  0
# 2021-01-01 08:00:05  1
# 2021-01-01 16:00:10  2
# 2021-01-02 00:00:15  3
# 2021-01-02 08:00:20  4

print(df.between_time('8:00:05', '8:00:20', include_start=False))
print('------------------------')
print(df.between_time('8:00:05', '8:00:20', include_end=False))
print('------------------------')
print(df.between_time('8:00:05', '8:00:20', include_start=False, include_end=False))

 

결과

                     A
2021-01-02 08:00:20  4
------------------------
                     A
2021-01-01 08:00:05  1
------------------------
Empty DataFrame
Columns: [A]
Index: []</b>

 

마지막으로 시작 시간을 종료 시간보다 과거로 설정해도 데이터가 추출됩니다.

이러한 경우에는 시간 범위가 24시간 + 종료 시간으로 설정됩니다.

import pandas as pd
import datetime

i = pd.date_range('2021-01-01', periods=6, freq='8H5s')

# 날짜와 시간을 가진 샘플 데이터 생성
df = pd.DataFrame({'A': [0,1,2,3,4,5]},index=i)

# DataFrame에 생성한 샘플 데이터
#                      A
# 2021-01-01 00:00:00  0
# 2021-01-01 08:00:05  1
# 2021-01-01 16:00:10  2
# 2021-01-02 00:00:15  3
# 2021-01-02 08:00:20  4

print(df.between_time('8:00:30', '8:00:00'))

 

결과

                     A
2021-01-01 00:00:00  0
2021-01-01 16:00:10  2
2021-01-02 00:00:15  3
2021-01-02 16:00:25  5

 

정리

DataFrame에 시간 형태로 저장된 데이터에서 시간을 지정해 해당 데이터만 추출하는 방법을 알아봤습니다.

at_time()은 지정한 시간과 완전 일치하는 데이터만 출력합니다.

between_time()은 시간 범위를 지정해, 포함된 데이터만 출력합니다.

at_time()과 between_time()로 검색해 해당되는 데이터가 존재하지 않는 경우에는 공백 DataFrame을 반환합니다.

댓글