@ html 특수문자 변환
import html
html.unescape("I don't care")
-> "I don't care"
@ 문자열 형태의 리스트, 리스트 형식으로 변환
eval(문자열) : 문자열 형태의 명령어 실행
@ 딕셔너리 하나 출력
keys = list(dict.keys())
dict[keys[0]]
@ 딕셔너리 출력
dict(sorted(dict_name.items())[:5])
@ 딕셔너리 반복문
for key, value in dictname.items() :
@ 데이터프레임 조건문
data[data['match']=='Pass']
data.loc[data['match']=='Pass']
@ 2차원 리스트 해제(1차원으로)
my_list = [[1, 2], [3, 4], [5, 6]]
answer = sum(my_list, [])
@ 데이터프레임 중복 제거
df = df.drop_duplicates(ignore_index=True)
중복 행 확인 : df[df.duplicated(keep=False)]
@ 데이터프레임 to 시리즈
df.squeeze()
@ 반복문 인덱스 출력
for i, num in enumerate(numbers) :
@ 데이터프레임 결측치
제거 : df = df.dropna()
확인 : df[df['col_name'].isnull()]
@ GPU 사용
import os # gpu 할당 in jupyter
os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"]= "2,3"
@ 데이터프레임 조건 수정
df.loc[df['grades'] == 90, 'result'] = 'A'
@ 시드 고정
def seed_all(seed) :
os.environ["PYTHONHASHSEED"] = str(seed)
random.seed(seed)
np.random.seed(seed)
torch.manual_seed(seed) # pytorch
torch.cuda.manual_seed_all(seed)
torch.cuda.manual_seed(seed)
torch.backends.cudnn.benchmark = False
torch.backends.cudnn.deterministic = True # 속도 저하 있음
os.environ['TF_DETERMINISTIC_OPS'] = '1' # tensorflow
tf.random.set_seed(seed)
@ 연산 기호
나머지 : %
몫 : //
@ 데이터프레임 분할
df.iloc[:100000]
@ 오류 무시
try :
code~
except :
pass
@ print 변수 출력
print("정수 : %d, 실수 : %.10f" % (num1, num2))
print("퍼센트 : %d%%" % num)
@ 반복문 변수 2개
for n1, n2 in zip(x, y):
@ CUDA ERROR 쿠다 에러
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")를
device = torch.device("cpu")로 바꾸면 구체적인 오류가 출력됨
@ re.sub 사용법
[0-9]+ : 숫자 여러개
ex) re.sub(r"[0-9]+_", "", text)
@ 파일명, 폴더명 일괄 변경
import re
import os
path = "./fish2_1-396"
names = os.listdir(path)
for name in names :
new = re.sub(r"[0-9]+_", "", name)
new = os.path.join(path, new)
name = os.path.join(path, name)
os.rename(name, new)
@ pickle
f = open('file_name', 'wb')
pickle.dump(obj1, f)
pickle.dump(obj2, f)
f.close()
f = open('file_name', 'rb')
d = pickle.load(f) # obj1 로드
print(d)
d = pickle.load(f) # obj2 로드
print(d)
@ pickle while
with open(file, "rb") as f:
while True:
try:
obj = pickle.load(f)
except EOFError:
break
@ 데이터프레임 사용할 열만 불러오기
pd.read_csv('file_name.csv', usecols=[col_name1, col_name2])
@ 한글을 포함한 csv 불러오기
pd.read_csv('data.csv', encoding='utf-8')
pd.read_csv('data.csv', encoding='cp949')
@ csv 저장
data.to_csv('data.csv', index=False, encoding='utf-8')
@ 데이터프레임 열 이름 변경
df.columns = ['col1', 'col2', 'col3'] # 전체
df.rename(columns={'Before':'After'}) # 선택
@ 리스트 특정 원소 제거/삭제
list = [1,2,3,4,4,5]
list.remove(4) # 결과 : [1,2,3,4,5]
list = [[1,2,3], [1,2,3]]
for l in list :
l.remove(1) # 결과 : [[2, 3], [2, 3]]
@ 리스트 원소 인덱스로 제거/삭제
list = [1, 2, 3, 4]
del list[1] # [1, 3, 4]
@ tqdm while
with tqdm(total=len(a)) as pbar:
d = 0
while d < 100:
pbar.update(1)
print(a[d])
d += 1
@ 코드 실행 시간
import time
start_time = time.time()
end_time = time.time()
t = end_time - start_time # 초단위
print('RunTime: %dh %dm %ds' % (t//60//60, t%60, t%60%60))
@ 리스트 원소 개수 세기
a = ['blue', 'blue', 'red', 'orange', 'green', 'green', 'blue', 'gray']
a.count('blue') # 3
@ 특정 단어를 포함하는 경우 새로운 열 추가
data['새로운 열']data['찾을 열'].str.contains('특정 단어')] = 새로운 열의 값
@ apply + lambda 사용법
df['colname'] = df['colname'].apply(lambda x : eval(x))
@ 폴더 생성
@ windows venv 가상환경
(python 설치시 Add python.exe to PATH 체크)
[cmd]
install : python -m venv myvenv
activate : .\myvenv\Scripts\activate.bat
[bash]
install : python -m venv myvenv
activate : source myvenv/Scripts/activate
bash: '\r': command not found 오류 -> sed -i -e 's/\r//' myvenv/Scripts/activate
@ windows airflow 설치
bash 실행
@ 파이썬 버전에 맞는 airflow 설치
AIRFLOW_VERSION=2.6.3
PYTHON_VERSION={AIRFLOW_VERSION}/constraints-{AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}"