dt)Pandas의 dt 접근자는 날짜와 시간을 다루기 위한 다양한 속성과 메서드를 제공한다.
아래는 자주 사용되는 속성과 메서드이다.
| 속성 | 설명 | 예시 |
|---|---|---|
dt.year | 연도를 추출 | df['date'].dt.year |
dt.month | 월을 추출 | df['date'].dt.month |
dt.day | 일을 추출 | df['date'].dt.day |
dt.hour | 시간을 추출 | df['date'].dt.hour |
dt.minute | 분을 추출 | df['date'].dt.minute |
dt.second | 초를 추출 | df['date'].dt.second |
dt.date | 날짜 부분만 추출 | df['date'].dt.date |
dt.time | 시간 부분만 추출 | df['date'].dt.time |
dt.weekday | 요일(0=월요일, 6=일요일)을 추출 | df['date'].dt.weekday |
dt.is_leap_year | 윤년 여부를 나타냄 | df['date'].dt.is_leap_year |
dt.days_in_month | 해당 월의 일 수를 반환 | df['date'].dt.days_in_month |
| 메서드 | 설명 | 예시 |
|---|---|---|
dt.strftime(format) | 날짜를 주어진 형식의 문자열로 변환 | df['date'].dt.strftime('%Y-%m-%d') |
dt.floor(freq) | 주어진 빈도에 따라 날짜를 내림 | df['date'].dt.floor('D') |
dt.ceil(freq) | 주어진 빈도에 따라 날짜를 올림 | df['date'].dt.ceil('D') |
dt.round(freq) | 주어진 빈도에 따라 날짜를 반올림 | df['date'].dt.round('H') |
Series.isin(값_목록)True, 포함되지 않으면 Falseanswer = video[['viewcnt', 'ct', 'videoname']]
answer = answer[answer.ct.dt.date.isin(target.ct.dt.date)]
.dt.date: datetime 객체에서 연-월-일만 추출해 시, 분, 초를 제외하고 날짜 값만 얻음.isin(target.ct.dt.date): target의 날짜 목록을 기준으로 answer의 ct 열에 있는 날짜가 포함되는지 여부를 반환.answer 데이터프레임의 ct 열에서 target 날짜 목록에 해당하는 행만 남기게 됨.isin은 두 데이터프레임 간 날짜, ID 등의 공통 항목을 기준으로 데이터를 필터링하거나 특정 조건에 맞는 행을 빠르게 선택할 때 매우 유용함.
groupby: 특정 열을 기준으로 데이터를 그룹화함.agg: 그룹화된 각 그룹에 대해 다양한 집계 연산을 동시에 적용할 수 있도록 함.df.groupby('그룹화_기준_열').agg(집계_연산)
그룹화_기준_열: 그룹을 나눌 기준이 되는 열집계_연산: 적용할 연산의 종류, 함수 또는 함수의 목록agg의 활용 방식열에 하나의 집계 함수를 적용하여 결과를 반환함. 예를 들어, sum, mean 등과 같은 함수가 사용될 수 있음.
# 각 그룹의 'viewcnt' 합계를 구함
df.groupby('videoname').agg({'viewcnt': 'sum'})
dict를 사용하여 열마다 다른 집계 함수를 지정할 수 있음. 이 방식은 열마다 서로 다른 요약 통계를 구할 때 유용함.
# 'viewcnt'는 합계, 'likes'는 평균을 계산함
df.groupby('videoname').agg({'viewcnt': 'sum', 'likes': 'mean'})
리스트를 사용하여 특정 열에 여러 개의 집계 함수를 동시에 적용할 수 있음.
# 'viewcnt'에 대해 합계와 평균을 동시에 계산함
df.groupby('videoname').agg({'viewcnt': ['sum', 'mean']})
여러 열에 대해 여러 집계 함수를 조합하여 사용할 수 있음.
# 'viewcnt'는 합계와 평균, 'likes'는 최대값과 최소값을 계산함
df.groupby('videoname').agg({
'viewcnt': ['sum', 'mean'],
'likes': ['max', 'min']
})
agg를 사용하여 사용자 정의 함수를 적용할 수도 있음. 익명 함수(lambda)를 사용하거나 미리 정의한 함수를 적용할 수 있음.
# 'viewcnt'에서 중위수를 계산하는 사용자 정의 함수 적용
df.groupby('videoname').agg({'viewcnt': lambda x: x.median()})
groupby와 agg 활용data = {
'videoname': ['공범_1', '공범_1', '공범_2', '공범_2', '공범_3', '공범_3'],
'viewcnt': [150, 200, 250, 300, 100, 50],
'likes': [10, 20, 15, 25, 5, 7]
}
df = pd.DataFrame(data)
# 'videoname' 별로 'viewcnt'의 합계와 'likes'의 평균을 구함
result = df.groupby('videoname').agg({'viewcnt': 'sum', 'likes': 'mean'})
print(result)
출력:
viewcnt likes
videoname
공범_1 350 15.0
공범_2 550 20.0
공범_3 150 6.0
groupby와 agg 조합을 사용하면 여러 열에 대해 서로 다른 집계 함수를 동시에 적용할 수 있음.sum, mean 등)뿐만 아니라 사용자 정의 함수도 사용 가능.agg는 dict 또는 list로 집계 함수를 전달하여 각 열에 대해 개별 설정이 가능함.duplicated와 drop_duplicates에 대한 설명duplicated와 drop_duplicates는 Pandas에서 데이터프레임의 중복된 데이터를 다루기 위해 사용되는 메서드. duplicated는 중복 여부를 판별하고, drop_duplicates는 중복된 데이터를 제거하여 새로운 데이터프레임을 반환함. 둘 다 특정 열에 대해서만 중복을 판별할 수 있어 데이터 전처리 시 유용함.
duplicated 메서드duplicated는 각 행이 이전에 나타난 행과 중복되는지를 True와 False로 표시하는 불리언 시리즈를 반환함. 처음 나타난 중복 행은 False, 이후에 동일한 항목이 있으면 True로 표시하여 중복 여부를 확인할 수 있음.
DataFrame.duplicated(subset=None, keep='first')
subset: 중복을 확인할 열을 지정함. 여러 열을 확인하려면 리스트 형태로 전달할 수 있음.keep: 중복이 있을 때 어떤 값을 False로 유지할지 결정함. 'first': 처음 나타난 중복 행을 유지하고 이후 중복 행을 True로 표시함.'last': 마지막으로 나타난 중복 행을 유지하고 앞선 중복 행을 True로 표시함.False: 모든 중복 행을 True로 표시함.import pandas as pd
data = {
'ct': ['2024-10-29', '2024-10-30', '2024-10-30', '2024-10-31'],
'videoname': ['공범_1', '공범_1', '공범_1', '공범_2']
}
df = pd.DataFrame(data)
# 중복 여부 확인
df['is_duplicated'] = df.duplicated(subset=['ct', 'videoname'], keep='first')
print(df)
출력:
ct videoname is_duplicated
0 2024-10-29 공범_1 False
1 2024-10-30 공범_1 False
2 2024-10-30 공범_1 True
3 2024-10-31 공범_2 False
위 코드에서, duplicated는 ct와 videoname이 모두 동일한 경우 중복으로 간주함. keep='first'로 지정하여 처음 나타난 중복은 False, 이후 중복은 True로 표시함.
drop_duplicates 메서드drop_duplicates는 중복된 행을 제거하고 중복되지 않은 고유한 값만 포함하는 새로운 데이터프레임을 반환함. 중복을 판단하는 기준 열을 지정할 수 있으며, 필요에 따라 첫 번째나 마지막 중복을 남길 수도 있음.
DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)
subset: 중복 여부를 확인할 열을 지정함. 지정하지 않으면 모든 열을 기준으로 중복을 판단함.keep: 중복이 있을 때 유지할 값을 결정함.'first': 첫 번째 중복 값을 남기고 이후 중복 행을 제거함.'last': 마지막 중복 값을 남기고 이전 중복 행을 제거함.False: 중복된 모든 행을 제거함.inplace: True로 설정하면 원본 데이터프레임에서 중복을 제거하고, False로 설정하면 중복이 제거된 새 데이터프레임을 반환함.# 중복 행 제거
unique_df = df.drop_duplicates(subset=['ct', 'videoname'], keep='first')
print(unique_df)
출력:
ct videoname
0 2024-10-29 공범_1
1 2024-10-30 공범_1
3 2024-10-31 공범_2
위 코드에서는 drop_duplicates를 사용하여 첫 번째 중복만 남기고 이후 중복된 행을 제거함.
duplicated: 데이터프레임에서 중복 여부를 확인하는 불리언 시리즈를 반환함.drop_duplicates: 중복된 행을 제거하여 고유한 값만 남긴 데이터프레임을 반환함.subset과 keep 파라미터를 통해 중복 판단 기준 열과 남길 중복 행을 세부적으로 설정할 수 있음. df.loc 메서드df.loc[row_label, column_label]import pandas as pd
data = {
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}
df = pd.DataFrame(data, index=['x', 'y', 'z'])
# 특정 라벨 행 선택
print(df.loc['x']) # 'x' 라벨의 행 전체 선택
print(df.loc['y':'z']) # 'y'부터 'z'까지 행 선택 (포함됨)
# 특정 라벨 행과 열 선택
print(df.loc['x', 'A']) # 'x' 행, 'A' 열의 값 선택 (결과: 1)
print(df.loc[:, ['A', 'C']]) # 모든 행에서 'A'와 'C' 열만 선택
출력:
A 1
B 4
C 7
Name: x, dtype: int64
A B C
y 2 5 8
z 3 6 9
1
A C
x 1 7
y 2 8
z 3 9
df.iloc 메서드df.iloc[row_index, column_index]# 특정 위치의 값 선택
print(df.iloc[0]) # 첫 번째 행 전체 선택
print(df.iloc[1:3]) # 두 번째부터 세 번째 행 선택 (마지막 포함하지 않음)
# 특정 위치의 행과 열 선택
print(df.iloc[0, 1]) # 첫 번째 행, 두 번째 열 값 선택 (결과: 4)
print(df.iloc[:, [0, 2]]) # 모든 행에서 첫 번째, 세 번째 열 선택
출력:
A 1
B 4
C 7
Name: x, dtype: int64
A B C
y 2 5 8
z 3 6 9
4
A C
x 1 7
y 2 8
z 3 9
| 특징 | df.loc | df.iloc |
|---|---|---|
| 인덱싱 기준 | 라벨(인덱스 이름과 컬럼 이름) | 정수 기반 (위치 인덱스) |
| 마지막 인덱스 포함 | 포함 (loc[1:3]) | 제외 (iloc[1:3]) |
| 사용 사례 | 특정 라벨을 기준으로 선택할 때 사용 | 위치 기반으로 데이터를 선택할 때 |
df.loc는 라벨 기반 접근법으로, 인덱스 이름이나 컬럼 이름을 알고 있을 때 사용하기 좋음.df.iloc는 정수 기반 접근법으로, 데이터 위치에 따라 선택할 때 유용함.