프로그래밍 문법/python 66

데코레이터(decorator)

데코레이터- 특정 함수를 수행하기 전 처리가 필요한 경우 이를 편하게 수행할 수 있게 해줌- 함수 앞에 @와 함께 다른 함수(wrapper)을 선언 예시import timedef decorator(func): def wrapper(*args, **kwargs): start_time = time.perf_counter() func() end_time = time.perf_counter() print("elapsed time:", end_time -start_time) return wrapper@decoratordef hello(): for _ in range(1000): print("hello", end=" ") print()hello()

데이터프레임 문자열 컬럼을 두개로 쪼개기

문자열 쪼개기 하나의 문자열 컬럼을 쪼개서 다른 문자열 컬럼 두개로 만든다 str사용 a = df["SNP_01"].str[0] b = df["SNP_01"].str[2] display(pd.DataFrame({"SNP_01_01":a,"SNP_01_02":b})) apply함수사용 def split_get_one(a): return a[0] def split_get_two(a): return a[2] a = train["SNP_01"].apply(split_get_one) b = train["SNP_01"].apply(split_get_two) display(pd.DataFrame({"SNP_01_01":a,"SNP_01_02":b}))

파이썬 zip함수

파이썬 zip함수 여러 iterable한 자료형을 순서대로 묶어준다 예시 1 a=[1,2,3,4,5,6,7,8,9] b=[10,20,30,40,50,60,70,80,90] c=[100,200,300,400,500,600,700,800,900] list(zip(a,b,c)) 예시 2 : 묶을 데이터의 길이가 다르면 같은 거 까지만 묵어준다 a=[1,2,3,4,5,6,7,8,9] b=[10,20,30,40,50,60,70,80,90,10,20] c=[100,200,300,400,500,600,700,800,900,100,200] list(zip(a,b,c)) 예시 3 : 자료형이 달라도 묶인다 a=[1,2,3,4,5,6,7,8,9] b={10,20,30,40,50,60,70,80,90,10,20} c=(10..

pip이용하여 requirements.txt 만들기

1. requirements.txt 현재 가상환경에 설치된 python 패키지를 버전과 함께 작성하여 requirements.txt 파일에 저장한다 2. requiremnets.txt 생성 커맨드 다음 커맨드를 이용하여 자동으로 requirements.txt파일을 생성할 수 있다. pip freeze > requirements.txt * 가끔 다음과 같이 @ file 형식으로 버전이 저장되는 경우가 있다. aioredis @ file:///home/conda/feedstock_root/build_artifacts/aioredis_1591809643295/work amqp @ file:///home/conda/feedstock_root/build_artifacts/amqp_1591005859311/work..

파이썬 argparse 사용법

argparse 파이썬 실행시 옵션을 추가할 수 있게 해주는 argparse의 사용법을 알아본다. argparse 구현 import argparse def main(): # args 선언 args = argparse.ArgumentParser() # arg 추가 args.add_argument('--arg1', type=str, default='default1', help='이것은 default1입니다.') args.add_argument('--arg2', type=str, default='default2', help='이것은 default2입니다.') args.add_argument('--arg3', type=int, default=3, help='이것은 default3입니다.') # 파싱 conf..

파이썬 라이브러리 설치, 버전확인, 삭제

1. 라이브러리 설치 pip install [라이브러리이름]==[버전] 버전을 적지 않으면 최신 버전으로 설치 2. 라이브러리 버전 확인 2.1 콘솔창에서 확인 pip show [라이브러리이름] 2.2 코드에서 확인(파이썬 3.8이하) from importlib_metadata import version print(version('라이브러리')) 2.3 코드에서 확인(파이썬 3.8이상) import pkg_resources print(pkg_resources.get_distribution('pywin32').version) 3. 라이브러리 삭제 pip uninstall [라이브러리]

PyAutoGUI 실행시 pyautogui.FailSafeException 에러

1. 문제, 원인 PyAutoGUI로 파일 실행시 다음의 에러가 발생하는경우가 있다. pyautogui.FailSafeException: PyAutoGUI fail-safe triggered from mouse moving to a corner of the screen. To disable this fail-safe, set pyautogui.FAILSAFE to False. DISABLING FAIL-SAFE IS NOT RECOMMENDED. 이는 파일이 실행중, 마우스가 모니터 사각형 모서리에 가는 경우 발생하는 에러이다 2. 해결 pyautogui.FAILSAFE = False 위의 코드를 추가하는 것으로 해당 에러를 방지할 수 있다.

파이참 모듈 설치후에도 ModuleNotFoundError: No module named 에러발생시 해결법

특정 모듈 설치 후에도 ModuleNotFoundError: No module named 에러가 발생하는 경우가 있다. 이런 경우 모듈이 설치된 파이선인터프리터와, 현재 실행되고있는 파이썬 인터프리터가 다른 경우가 원인일 때가 있다. 즉 모듈이 설치된 파이선 인터프리터를 현재 파일의 인터프리터로 설정하면 문제가 해결된다. 따라서 1. 모듈이 설치된 파이썬 인터프리터 2. 현재실행되고있는 파이썬 인터프리터 위 1,2를 일치시키면 문제가 해결된다.

함수 파라미터를 변수로 묶어서 넣기 (*args, **kwargs)

함수의 파라미터를 변수로 만들어주는 것 *args, **kwargs 함수의 파라미터 값이 매우 많은 경우가 있다. (catboost의 예) 이 경우 함수의 파라미터값을 줄줄 써주어야 하는 불편함이 있다. 이를 방지하기 위해 변수에 함수 파라미터를 넣고, 해당 변수만 함수의 input값으로 주면 코드를 깔끔하게 할 수 있다. 이를 가능하게 해주는 것이 *args와 **kwargs이다. 먼저 파라미터 a,b,c가 있는 다음과 같은 함수가 있다. def func(a,b,c): print("a : ",a) print("b : ",b) print("c : ",c) 이를 *args와 **kwargs *args 파라미터들을 튜플형태로 묶어준다. 파라미터 순서에 맞게 튜플 값들의 순서를 맞춰주어야 한다. input_a..

파이썬 함수주석(Function Annotations), (->, : , __anotations__)

파이썬 Function Annotations 파이썬에서 함수를 구현할때, input과 output의 type을 주석으로서 명시해줄 수 있다. 다음과 같이 ":" 과 "->"를 하고 타입을 명시해준다. def f(a:str, b:int, c:bool)->list: 이는 a는 string타입, b는 int타입, c는 bool타입, 그리고 함수 리턴값은 list타입을 의미한다. 예시 1. code def f(a:str, b:int, c:bool)->list: print("a의 데이터타입은 string : ",a) print("b의 데이터타입은 int : ",b) print("c의 데이터타입은 bool : ",c) return [a,b,c] return_value = f("hello",10,True) print..

파이썬 시간 datetime 클래스

함수 의미 timetype.strftime(“%Y%m%d”) time 타입의 객체를 “20210510” 형식으로 바꿈 timetype-timedelta(days=1) 하루 전으로 시간을 옮김 datetime.datetime.strptime(“2021-07-19”,”%Y%m%d”) 문자열을 time 타입으로 (2021-07-19 00:00:00) dateobj.date() 분단위 까지 있는 시간타입을 일단위까지 만들어줌 (2021-07-19 00:00:00 => 2021-07-19 ) dateobj.weekday() 날짜타입의 요일을 반환 (월요일:0, 화요일:1 ...일요일:6)

파이썬 매직메소드

메직메소드란? 특정 클래스의 객체가 builtin 함수(혹은 사칙연산)의 input값으로 사용될 때 그 output값을 정의하는것. 예를 들어 string의 객체인 a,b가 아래와 같이 있다고 하자. a="hi" b="bye" 이때 print()를 사용하면(print(a),print(b)) hi bye 위와 같이 나오고 a+b를 하면 hi bye 위와같은 결과를 얻는다. 그렇다면 우리가 직접 클래스를 정의하고 그 클래스의 객체가 print, +, add등의 built in 함수에 사용되었을 때 결과값을 정의해보자. 클래스 정의 및 매직메소드 정의 class Myclass: def __init__(self,name,tall): self.name=name self.tall=tall def __repr__(s..