본문 바로가기

파이썬(Python)

(28)
판다스(pandas) 옵션에 True 대신 1, False 대신 0 넣어도 잘 동작한다만, True/False로 쓰는 게 안전하다. pd.to_csv 사용해서 확인해보니, True나 False 로 길게 안쳐도 된다. 대신에 None 들어가야 하는자리에 0 쓰면 안될 때가 있다. 대표적으로 index_col 같은거. 값 줄때 None을 써야 아예없다고 인식하고, 0은 0번째 줄(엑셀의 첫번째 줄)로 가져오라고 동작한다. 그냥 True, False 로 쓰는게 안전하다. 그런데 치기 귀찮으니까 T = True F = False N = None 맨 먼저 실행시켜 놓고, 약어로 써먹으면 편리하다.
print 함수 오타 내도 돌아가도록 만듦 + True, False, None 축약시킴 True, False, None 끝까지 치기도 귀찮고, print 함수의 오타 잡는게 귀찮아서 만들었다. 사실 True 대신 1, False 대신 0 을 써놔도 대부분은 같게 실행된다. 자주 발생하는 print의 오타만 해당하고, input 한계로 부가기능은 쓸 수 없다. T = True F = False N = None def pirnt(ins): return(print(ins)) def pirtn(ins): return(print(ins)) def prtn(ins): return(print(ins)) def pritn(ins): return(print(ins))
Python용 println 함수 만들기: print 함수 실행 끝내고 마지막에 빈줄 하나 추가해준다. 파이썬에는 println 함수가 없다. ipynb 형식에서 셀 단위로 작업하는데, print 함수를 여러번 쓸 때 특정한 구간의 print 함수출력이 끝나고 그 사이에 빈줄을 하나 넣어서 보여줘야 할 때가 있는데, 그때마다 '\n' 치기가 귀찮았다. 그래서 자동으로 '\n' 넣어서 보여주는 기능 추가했다. def println(objects, sep=' '): # 뒤에 개행넣기 귀찮아서 자바에 있는 printn 기능 야매로 만듦ㅋ if sep == ' ': print(objects) elif sep == '\n': for i in range(len(objects)): print(objects[i]) else: # does not work in some unicode_escape such as, sep =..
파이썬 내장 함수는 복사하기 어렵다. It is hard to copy a built-in function in Python 스펠링을 자주 틀리는 내장 함수를 복사해서 써먹으려고 찾아봤는데, 아래의 검색어로 찾아서 나온 상위 스택오버플로 구문엔 없다. The solutions given in following are not working if you want to make a copied funcion of a built-in function Python. https://www.google.com/search?q=how+to+create+a+copy+of+a+python+funciton&oq=how+to+create+a+copy+of+a+python+funciton&aqs=chrome..69i57j33i10i160l3j33i21.7615j1j7&sourceid=chrome&ie=UTF-8 🔎 how to create a cop..
파이썬 함수명과 변수명 분리해서 잘 짓는 방법: 함수명은 동사로 시작하고, 변수명은 명사로 시작하기. 파이썬은 PEP8 규칙에 따라, 함수명과 변수명 둘다 영어소문자a to z 와 언더바_ 와 숫자 0~9 만 쓴다. 문제는 함수명과 변수명의 표기에 영어대문자를 쓰지 않도록 권장하기 때문에 대충 지었다가는 이 단어가 함수인지 변수인지 헷갈릴 수 있다. 그래서 둘을 읽을때부터 잘 구분하는 식별자 같은걸 어떻게 넣는지 궁금했다. 그러나 How to make a good name of function name and variable name 이런걸 쳐봐도 좋은 예제를 보여주면서 요령(노하우, know-how)을 알려주는 사람이 딱히 없었다. 다행히 이 분이 괜찮은 예문을 적어두었다. https://dkje.github.io/2020/08/03/CleanCodeSeries2-copy/ 2. 변수명과 함수명 짓기 ..
koala NLP(코알라 NLP)는 파이썬 3.8 이하 필요 5개 분석기를 클래스로 하는 라이브러리인 KoNLPy 가 잘 안되서 찾아보니, 코알라 NLP 라는게 있다고 나왔다. 더 많은 형태소 분석기를 넣었다 카더라. 그런데 코알라 NLP를 돌리니까 getchildren() 에러가 난다. 찾아보니 오류가 많은지 파이썬 3.9에서는 아예 삭제된 기능이라고 나온다. 그래서 코알라를 쓰려면 파이썬 3.8 이하가 필요하다.
판다스 데이터프레임에서 빈 셀은 NaN으로 표기된다. 그리고 파이썬에서는 NaN 과 Null 을 같다고 취급하므로, isna 와 isnull 역시 같은 기능을 한다. 아래는 엑셀로 저장한 스프레드시트를 판다스 데이터프레임으로 불러왔을때 모습이다. col_index = 0th row row_index = None
다중 for loop 의 변수명을 같게 쓰면 안되는 이유: 중간에 바뀐다. for 문 너무많이 겹치면 당연히 느려지는데 그 이야기가 아니다. 동작 자체는 크게 문제없는데, 출력을 걸어보면 마지막 쯤에 문제가 있을 수도 있다. 특히 해당 변수값을 사용해서 무엇을 한다면 말이다. 아래 예제는 이중 for문에서, 변수를 i 로 같게 쓴 상황이다. 마지막 루프에서 i = 9를 썼는데 내부 루프때문에 i = 0, i =1 을 사용해서 결국 i =1 로 끝난것을 볼 수 있다. 무턱대고 i 를 다른 계산에 써버렸다간 큰일난다.
인코딩 악의축은 의외로 윈도우 운영체제와 엑셀인듯? python pandas dataframe 을 사용해서 만들면 아무런 문제가 없는데, 중간중간 저장해놓은 csv 나 xlsx 를 엑셀로 열어서 저장하면 생각보다 자주 찐빠가 난다. 윈도우가 기본적으로 ANSI (나라마다 다른데 한국은 cp949)를 쓰는데다, 엑셀도 이걸 기본값으로 설정한다. 심지어 utf-16을 unicode 라고 표기해 두는 일도 잦다. 거기다 utf-8로 된 자료를 바로 읽어오는 기능이 없다. 바로 읽으려면 무조건 utf-8 +BOM 형식으로 저장해야 한다. (메모장은 바로 읽음ㅋㅋㅋ) 웹을 다루어야 하거나, 파이썬을 다루는 사람들은 엑셀의 기본 인코딩을 싸그리 utf-8 로 바꾸는것도 답이다.ㄹㅇ. 그런데 이러면 ANSI 를 못 읽지 않나? 노답.
UnicodeDecodeError 만드는 바이트값 목록 UTF-8 (1~4바이트 가변) 인코딩 바이트 크기와 위치 가능 설명+오류값 판별법 1바이트 가능: \x00 ~ \xFF 전부 가능. \x00 ~ 2바이트 이상에서, 나머지 바이트 가능: \x80 ~\BF 불가능: \x00~\x7F \xC0~\xFF 바이트 값이 반드시 10xx xxxx 이어야 하므로 헥스코드2자리 중 앞자리가 8,9,A,B (1000 ~ 1011) 만 가능하다. 나머지 값인 0~7, C~F 가 들어가면 오류난다. 2바이트의 첫번째 바이트 가능: \xC0~\xDF 불가능: \x00~\xBF \xE0~\xFF 바이트 값이 반드시 110x xxxx 이어야 하므로 헥스코드2자리 중 앞자리가 C,D (1100,1101)만 가능하다. 나머지 값인 0~9, A,B,E,F 가 들어가면 오류난다. 3바..