1. datetime 모듈
용도; 날짜와 시간을 처리
기능; 날짜와 시간의 생성, 조작, 형식 지정 및 차이 계산
종류; datetime 모듈 안에 date, time, datetime, timedelta 등의 클래스가 포함
이들 각각에 대해 자세히 살펴보겠습니다.
(1). datetime.date 클래스
date 클래스는 연도, 월, 일로 구성된 날짜를 나타냅니다.
- date.today(): 오늘 날짜를 반환합니다.
- date(year, month, day): 특정 날짜를 생성합니다.
- date.year, date.month, date.day: 각각 연도, 월, 일을 반환합니다.
- date.weekday(): 요일을 반환합니다(월요일=0, 일요일=6).
(2). datetime.time 클래스
time 클래스는 시, 분, 초, 마이크로초로 구성된 시간을 나타냅니다.
- time(hour=0, minute=0, second=0, microsecond=0): 특정 시간을 생성합니다.
- time.hour, time.minute, time.second, time.microsecond: 각각 시, 분, 초, 마이크로초를 반환합니다.
(3). datetime.datetime 클래스
datetime 클래스는 날짜와 시간을 함께 나타냅니다.
- datetime.now(): 현재 날짜와 시간을 반환합니다.
- datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0): 특정 날짜와 시간을 생성합니다.
- datetime.date(), datetime.time(): 각각 날짜와 시간 부분을 반환합니다.
- datetime.strftime(format): 날짜와 시간을 지정된 형식의 문자열로 변환합니다.
- datetime.strptime(date_string, format): 문자열을 지정된 형식으로 해석하여 datetime 객체로 변환합니다.
(4). datetime.timedelta 클래스
timedelta 클래스는 두 날짜나 시간 간의 차이를 나타냅니다.
- timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0): 시간 간격을 생성합니다.
- total_seconds(): 시간 간격을 초 단위로 반환합니다.
2. lambda 함수
:파이썬에서 lambda 함수는 익명 함수(anonymous function)를 생성하는 데 사용됩니다. lambda 함수는 보통 간단한 함수가 필요할 때, 특히 한 번만 사용될 함수를 정의할 때 유용합니다. lambda 함수는 lambda 키워드를 사용하여 정의하며, 일반 함수와는 다르게 이름이 없습니다.
- lambda 키워드로 시작합니다.
- 뒤에 함수의 매개변수들이 콤마로 구분되어 나열됩니다.
- 콜론(:) 뒤에 반환할 표현식을 작성합니다.
(1). 기본 사용법
(2). 리스트 정렬에서의 사용
lambda 함수는 종종 sort() 메서드나 sorted() 함수와 함께 정렬 기준을 정의하는 데 사용됩니다.
(3). 고차 함수에서의 사용
lambda 함수는 종종 map(), filter(), reduce() 같은 함수와 함께 사용됩니다.
- map(): 모든 항목에 대해 함수 적용 후 반환
- filter(): 조건을 만족하는 항목 필터링
- reduce(): 누적 함수 적용 (이 경우에는 functools 모듈을 임포트해야 합니다)
(4). 다른 함수 내에서 사용
lambda 함수는 다른 함수 내에서 간단한 함수를 정의할 때 유용합니다.
주의사항
- lambda 함수는 한 줄의 표현식만 가질 수 있으며, 복잡한 로직을 담기에는 적합하지 않습니다.
- lambda 함수는 코드의 가독성을 해칠 수 있으므로, 복잡한 로직이 필요한 경우에는 일반적인 def 키워드를 사용하여 함수를 정의하는 것이 좋습니다.
3. map 함수
파이썬의 map() 함수는 반복 가능한 객체(리스트, 튜플 등)의 모든 요소에 대해 지정된 함수를 적용한 결과를 반환하는 데 사용됩니다. map() 함수는 함수와 반복 가능한 객체를 인수로 받으며, 결과는 map 객체로 반환됩니다. 이 객체는 필요에 따라 리스트나 다른 자료형으로 변환할 수 있습니다.
map() 함수의 기본 구문
- function: 반복 가능한 객체의 각 요소에 적용할 함수.
- iterable: 반복 가능한 객체(리스트, 튜플 등). 여러 개의 반복 가능한 객체를 인수로 받을 수 있습니다.
1. 단일 반복 가능한 객체에 적용
리스트의 각 요소를 제곱하는 함수에 map()을 사용하는 예시입니다.
2. 여러 반복 가능한 객체에 적용
두 개의 리스트를 더하는 예시입니다.
3. 문자열 변환
리스트의 각 문자열을 대문자로 변환하는 예시입니다.
map() 함수와 사용자 정의 함수
미리 정의된 함수를 map()과 함께 사용할 수도 있습니다.
장점 및 주의사항
- map() 함수는 반복 가능한 객체의 각 요소에 대해 함수를 적용하는 간결하고 효율적인 방법입니다.
- map() 객체는 게으른 평가(lazy evaluation)를 사용하므로, 필요할 때만 계산됩니다.
- 결과를 리스트로 변환할 때는 list() 함수를 사용해야 합니다.
- map() 함수는 읽기 쉽고 간결한 코드 작성을 도와주지만, 복잡한 변환이 필요할 경우에는 리스트 컴프리헨션(list comprehension)이 더 가독성이 좋을 수 있습니다.
리스트 컴프리헨션과 비교
리스트 컴프리헨션을 사용하여 동일한 작업을 수행할 수 있습니다. 예를 들어, 각 요소를 제곱하는 경우:
map() 함수는 함수형 프로그래밍 스타일을 선호하는 경우 유용하며, 간단한 변환 작업에 효과적입니다. 그러나 복잡한 로직이 필요한 경우, 가독성을 고려하여 적절한 방식을 선택하는 것이 중요합니다.
이 코드는 datetime 모듈을 사용하여 데이터프레임의 날짜와 시간 데이터를 변환하고 조작하는 예시입니다. 데이터프레임의 특정 열에 대해 날짜와 시간을 파싱하고, 시간 조정을 수행한 다음, 결과를 새로운 열에 저장합니다. 이 코드는 특히 시계열 데이터를 처리하거나 시간대 변환, 시간 기반의 분석을 수행할 때 유용합니다.
코드 설명
datetime 모듈에서 datetime 클래스와 timedelta 클래스를 임포트합니다. datetime 클래스는 날짜와 시간을 다루는 데 사용되고, timedelta 클래스는 시간 간격을 나타내는 데 사용됩니다.
이 주석은 필요 없는 코드의 흔적으로 보입니다. datetime 모듈을 dt라는 별칭으로 임포트하려던 시도를 나타냅니다. 주석이므로 실제로 실행되지 않습니다.
- df["신고접수일시"] 열의 각 값을 apply 메서드를 사용하여 변환합니다.
- lambda x: datetime.strptime(x, "%Y%m%d_%H%M"):
- lambda 함수는 x라는 입력 값을 받아 datetime.strptime 함수를 사용해 문자열을 datetime 객체로 변환합니다.
- datetime.strptime(x, "%Y%m%d_%H%M"): 문자열 x를 지정된 형식("%Y%m%d_%H%M")에 따라 datetime 객체로 파싱합니다. 여기서 "%Y%m%d_%H%M"는 연도, 월, 일, 시간, 분의 형식을 나타냅니다.
- df["dt"] 열의 각 datetime 객체에 timedelta(hours=6)를 더해 6시간을 더합니다.
- timedelta(hours=6): 6시간의 시간 간격을 나타내는 timedelta 객체입니다.
- 결과는 새로운 열 "_dt"에 저장됩니다. 주석에 따르면, 이 작업은 특정 시간 범위를 조정하기 위해 수행됩니다(예: 18
09시간 범위를 0015로 이동).
- df["_dt"].dt.date: "_dt" 열의 각 datetime 객체에서 날짜 부분을 추출합니다.
- .astype(str): 날짜를 문자열 형식으로 변환합니다.
- 결과는 새로운 열 "_date"에 저장됩니다.
- df["_dt"].dt.hour: "_dt" 열의 각 datetime 객체에서 시간 부분을 추출합니다.
- 결과는 새로운 열 "_hour"에 저장됩니다.
- 최종적으로 변환된 데이터프레임을 출력하거나 반환합니다.
요약 및 사용 사례
이 코드의 목적은 df라는 데이터프레임의 날짜와 시간 데이터를 다음과 같은 방식으로 변환하는 것입니다:
- 문자열 형식의 날짜와 시간을 datetime 객체로 변환합니다.
- 6시간을 더해 시간대를 조정합니다.
- 변환된 날짜와 시간을 문자열로 저장합니다.
- 시간 부분만 별도의 열에 저장합니다.
이 코드는 다음과 같은 상황에서 유용합니다:
- 날짜와 시간 데이터를 표준화하거나 변환해야 할 때.
- 시간대 변환을 통해 데이터를 조정할 때.
- 특정 시간 범위를 분석하거나 시계열 데이터를 다룰 때.
이를 통해 데이터프레임의 날짜와 시간 데이터를 효율적으로 조작하고, 필요한 분석이나 변환을 쉽게 수행할 수 있습니다.
파이썬에서 데이터프레임(pandas.DataFrame)의 열을 선택하거나 새로운 열을 추가할 때, 대괄호 []를 사용합니다. pandas 라이브러리는 데이터 분석을 위해 널리 사용되는 라이브러리이며, 데이터프레임은 테이블 형식의 데이터를 저장하고 조작하는 데 사용됩니다. 다음은 코드에서 대괄호 []를 사용하는 이유와 그 사용법에 대한 설명입니다.
df["열이름"]의 의미
1. 기존 열 선택
df["열이름"] 형식은 데이터프레임 df에서 특정 열을 선택할 때 사용됩니다. 예를 들어, df["신고접수일시"]는 데이터프레임 df의 "신고접수일시"라는 이름의 열을 선택합니다.
2. 새로운 열 추가 또는 수정
df["새로운열이름"] = 값 형식은 데이터프레임 df에 새로운 열을 추가하거나, 기존 열을 수정할 때 사용됩니다. 예를 들어, df["dt"] = 값은 "dt"라는 이름의 새로운 열을 데이터프레임 df에 추가하고, 해당 열에 값을 할당합니다.
코드 설명
이 코드는 데이터프레임 df에 "dt"라는 새로운 열을 추가하고, "신고접수일시" 열의 값을 변환하여 해당 열에 저장합니다. 각 단계는 다음과 같습니다:
- df["신고접수일시"]:
- 데이터프레임 df에서 "신고접수일시"라는 기존 열을 선택합니다. 이 열은 아마도 날짜와 시간을 나타내는 문자열을 포함하고 있을 것입니다.
- .apply(lambda x: datetime.strptime(x, "%Y%m%d_%H%M")):
- apply 메서드는 데이터프레임의 각 요소에 함수를 적용합니다. 여기서 lambda x: datetime.strptime(x, "%Y%m%d_%H%M")는 각 요소 x에 대해 datetime.strptime(x, "%Y%m%d_%H%M") 함수를 적용하는 익명 함수입니다.
- datetime.strptime(x, "%Y%m%d_%H%M")는 문자열 x를 파싱하여 datetime 객체로 변환합니다. 예를 들어, "20230531_1234"라는 문자열을 datetime 객체로 변환합니다.
- df["dt"] = ...:
- 변환된 datetime 객체들을 "dt"라는 새로운 열에 저장합니다. 이로써 데이터프레임 df에는 "신고접수일시" 열에 있는 문자열 데이터를 datetime 객체로 변환한 결과가 "dt" 열에 추가됩니다.
요약
대괄호 []를 사용하는 이유는 데이터프레임의 특정 열을 선택하거나 새로운 열을 추가하기 위해서입니다. pandas 라이브러리에서 데이터프레임의 열을 선택하거나 조작할 때는 항상 대괄호를 사용하여 열 이름을 지정합니다. 이 구문을 통해 데이터프레임을 유연하게 다루고 원하는 데이터를 쉽게 추출하거나 변환할 수 있습니다.
apply() 함수는 pandas 라이브러리의 강력한 도구로, 데이터프레임의 행이나 열에 함수를 적용할 수 있게 해줍니다. 이 함수는 데이터 분석과 변환 작업을 효율적으로 수행할 수 있도록 도와줍니다.
apply() 함수의 기본 구문
- func: 각 행이나 열에 적용할 함수입니다.
- axis: 함수가 적용될 축입니다. 0이면 각 열(column)에 적용되고, 1이면 각 행(row)에 적용됩니다.
- raw: True이면 데이터프레임의 값을 넘겨주고, False이면 시리즈 객체를 넘겨줍니다.
- result_type: 결과의 유형을 지정합니다. 'expand', 'reduce', 'broadcast' 중 하나를 사용할 수 있습니다.
- args, **kwds: 함수에 추가적으로 전달할 인수들입니다.
예시들
1. 각 열에 함수 적용
각 열의 최대값과 최소값의 차이를 계산하는 함수 예시입니다.
출력:
2. 각 행에 함수 적용
각 행의 합계를 계산하는 함수 예시입니다.
출력:
3. 복잡한 변환 작업
데이터프레임의 특정 열을 변환하는 복잡한 예시입니다. 이 예시에서는 문자열로 저장된 날짜를 datetime 객체로 변환하고, 6시간을 더한 후 새로운 열에 저장합니다.
출력:
apply() 함수의 사용 사례
- 데이터 변환: 문자열을 날짜 형식으로 변환하거나, 특정 형식의 데이터를 다른 형식으로 변환할 때.
- 데이터 계산: 각 열이나 행에 대해 합계, 평균, 최대값, 최소값 등의 계산을 할 때.
- 데이터 정리: 복잡한 데이터 정리 작업을 수행할 때, 예를 들어, 텍스트 데이터를 처리하거나 여러 열의 데이터를 조합할 때.
주의사항
- apply() 함수는 데이터프레임의 각 요소에 대해 함수를 적용하기 때문에, 큰 데이터프레임에 대해 복잡한 작업을 수행할 경우 성능이 저하될 수 있습니다. 이 경우 벡터화 연산을 고려해볼 수 있습니다.
- 단일 열에 대해 함수를 적용하려면 apply() 대신 map()이나 applymap() 함수를 사용할 수 있습니다. map()은 시리즈에 적용되며, applymap()은 데이터프레임의 각 요소에 대해 함수를 적용합니다.
apply() 함수는 매우 유연하고 강력한 도구로, 다양한 데이터 변환 및 처리 작업을 간단하게 수행할 수 있도록 도와줍니다.
strptime 함수는 datetime 모듈에서 제공하는 함수로, 문자열을 특정 형식의 datetime 객체로 변환하는 데 사용됩니다. 이 함수는 주로 날짜와 시간 데이터를 파싱할 때 사용됩니다. strptime 함수는 string parse time의 약자입니다.
strptime 함수의 기본 구문
- date_string: 파싱할 날짜와 시간 문자열입니다.
- format: 문자열이 어떤 형식인지 지정하는 형식 문자열입니다.
형식 문자열의 구성 요소
strptime 함수는 형식 문자열을 사용하여 입력 문자열이 어떤 방식으로 날짜와 시간을 표현하는지 지정합니다. 형식 문자열은 다음과 같은 서식 지정을 포함할 수 있습니다:
- %Y: 4자리 연도 (예: 2023)
- %m: 2자리 월 (01부터 12)
- %d: 2자리 일 (01부터 31)
- %H: 2자리 시간 (24시간제, 00부터 23)
- %M: 2자리 분 (00부터 59)
- %S: 2자리 초 (00부터 59)
예시들
1. 기본 사용법
2. 다른 형식의 문자열 파싱
3. 시간만 포함된 문자열 파싱
datetime 객체는 날짜와 시간을 모두 포함해야 하기 때문에, 시간만 포함된 문자열을 파싱할 경우 기본적으로 날짜 부분은 1900-01-01로 설정됩니다.
4. 사용자 정의 형식의 문자열 파싱
코드 내 사용 사례
다음은 strptime 함수를 사용하여 데이터프레임의 문자열 열을 datetime 객체로 변환하는 예시입니다:
출력:
df["신고접수일시"].apply(lambda x: datetime.strptime(x, "%Y%m%d_%H%M")) 코드에서 x가 어떻게 지정되는지 이해하기 위해 apply 함수가 어떻게 작동하는지 자세히 설명하겠습니다.
apply 함수의 작동 원리
apply 함수는 pandas의 Series 객체에 정의되어 있습니다. apply 함수는 시리즈의 각 요소에 대해 지정된 함수를 적용하고, 그 결과를 새로운 시리즈로 반환합니다.
각 요소에 대한 함수 적용
- df["신고접수일시"]는 데이터프레임 df에서 "신고접수일시"라는 열을 선택합니다. 이 선택된 열은 pandas.Series 객체입니다.
- apply 함수는 이 시리즈의 각 요소에 대해 지정된 함수를 적용합니다.
- lambda x: datetime.strptime(x, "%Y%m%d_%H%M")는 익명 함수로, x는 시리즈의 각 요소를 나타냅니다.
예시 코드
다음 예시 코드를 통해 각 단계가 어떻게 작동하는지 살펴보겠습니다:
이 코드를 통해 apply 함수의 작동 방식을 단계별로 설명하면 다음과 같습니다:
- df["신고접수일시"]는 다음과 같은 시리즈를 반환합니다:
-
vbnet코드 복사0 20230531_1230 1 20230601_1545 2 20230602_0815 Name: 신고접수일시, dtype: object
- apply 함수는 이 시리즈의 각 요소에 대해 람다 함수를 적용합니다:
- 첫 번째 요소인 '20230531_1230'에 대해 lambda x: datetime.strptime(x, "%Y%m%d_%H%M")가 호출됩니다. 여기서 x는 '20230531_1230'이 됩니다.
- datetime.strptime('20230531_1230', "%Y%m%d_%H%M")는 datetime 객체 2023-05-31 12:30:00를 반환합니다.
- 동일한 과정이 나머지 요소에 대해서도 반복됩니다.
- 결과적으로, 새로운 시리즈가 생성되고, 이 시리즈는 "dt"라는 새로운 열로 df에 추가됩니다.
전체 코드의 흐름
- df["신고접수일시"] 열의 각 요소에 대해 람다 함수가 적용됩니다.
- 각 요소는 문자열에서 datetime 객체로 변환됩니다.
- 변환된 결과가 새로운 시리즈로 반환되고, 이 시리즈는 "dt" 열로 추가됩니다.
적용 후 데이터프레임
적용 후 데이터프레임은 다음과 같이 됩니다:
이렇게 apply 함수는 시리즈의 각 요소에 대해 지정된 함수를 적용하고, 그 결과를 새로운 시리즈로 반환하는 방식으로 작동합니다. lambda x: ...에서 x는 시리즈의 각 요소를 나타내며, 이 요소들에 대해 변환 작업이 수행됩니다.
ChatGPT