라벨이 Python인 게시물 표시

Python Change a str with index

이미지
사용 버전: Python 3.7.9 ​ 파이썬 Change a str with index를 알아보겠습니다. ​ 파이썬에서 str 타입을 인덱스를 써서 변경하려고 하면 다음과 같은 오류가 납니다. TypeError: 'str' object does not support item assignment 즉, str에는 값을 재정의 할 수 없다는 뜻입니다. ​ ​ ​ 이때는 list롤 사용합니다. list로 만든 다음에 다시 합쳐주는 과정을 거쳐주면 됩니다. ​ 3 번째 줄에서 list로 만들어 줍니다. 5 번째 줄에서 인덱스로 값을 변경해줍니다. 7 번째 줄에서 ''.join()을 사용해서 전부 합쳐줍니다. 끝. 카테고리: Python

Python sys.setrecursionlimit()

이미지
사용 버전: Python 3.7.9 ​ 파이썬 sys.setrecursionlimit()을 알아보겠습니다. ​ 재귀 함수를 이용하여 문제를 풀던 중, 런타임 에러를 만납니다. ​ RecursionError: maximum recursion depth exceeded while calling a Python object ​ 해석해 보면, 재귀 함수 깊이가 최대 호출 가능 수를 초과한다입니다. 파이썬의 기본 제한 값은 1,000입니다. 해결법은 간단합니다. ​ sys.setrecursionlimit()을 사용하면 됩니다. 괄호 안에는 몇 번을 반복할 수 있게 할지 숫자를 넣어줍니다. 끝. 카테고리: Python, sys

Python Bitwise operator shift

이미지
사용 버전: Python 3.7.9 ​ 파이썬 bitwise operator shift를 알아보겠습니다. ​ 비트를 다루는 연산자 중에 비트 위치 이동과 관련된 연산자를 다뤄봅시다. '<<'는 비트를 왼쪽으로 이동시켜 큰 값으로 만들고 '>>'는 비트를 오른쪽으로 이동시켜 작은 값으로 만듭니다. ​ 1 << 2는 1 * 2^2가 됩니다. 따라서 4. 3 << 4는 3 * 2^4가 됩니다. 따라서 48. 수식으로 보면 조금 헷갈리는데, 비트로 보면 쉽습니다. '0001' << 2 = '0100' 4 '0000 0011' << 4 = '0011 0000' 48 ​ ​ ​ 1 >> 2는 1 * 2^-2가 됩니다.  그러면 0.25가 되어야 하지만, 비트를 옮긴다는 것을 보면 왜 0이 되는지 알 수 있습니다. 48 >> 5는 48 * 2^-5가 됩니다. 그러면 1.5가 되어야 하지만, 비트를 옮긴다는 것을 보면 왜 1이 되는지 알 수 있습니다. '0001' >> 2 = '0000' 0 '0011 0000' >> 5 = '0000 0001' 1 ​ ​ 끝. 카테고리: Python, Standard Library

Python Make a 2 Dimensional array with init value

이미지
사용 버전: Python 3.7.9 ​ 파이썬 Make a 2 Dimensional array with init value를 알아보겠습니다. 파이썬의 2 차원 배열을 초깃값과 함께 만드는 방법을 알아봅시다. ​ 일차원 배열은 만들기 쉽습니다. 그냥 곱하기를 사용하면 됩니다. 그런데, 2 차원부터는 조금 복잡합니다. 저렇게 곱하기로 만들게 되면, 분명, (1, 1)을 7로 변경했을 뿐인데, (0, 1), (2, 1)도 모두 7로 변해버립니다. ​ 2 차원 배열은 아래처럼 만듭니다. 배열 하나를 만들고 거기에 배열로 감싸고 for 문을 돌립니다. [ [3] * 3 for _ in range(3)] 끝. 카테고리: Python

Python math.lcm()

이미지
사용 버전: Python 3.7.9 ​ 파이썬 math.lcm()을 알아보겠습니다. ​ lcm은 최소공배수를 구할 때 사용합니다. 보시다 싶이 Python 3.9 버전에 추가된 것이라서 현재 제가 사용하는 3.7.9에서는 사용할 수 없습니다. 괄호 안에는 여러 정수들을 넣습니다. 3.9가 아니라서 그냥 직접 만들어서 사용합니다. 최소공배수와 최대공약수의 관계를 이용해서 만듭니다. https://shwoghk14.blogspot.com/2022/12/blog-post.html 끝. 카테고리: Python, python_math

Python math.gcd()

이미지
사용 버전: Python 3.7.9 파이썬 math.gcd()를 알아보겠습니다. ​ gcd는 최대공약수를 구할 때 사용합니다. 괄호 안에는 최대공약수를 구하고 싶은 두 수를 집어넣습니다. ​ 4와 5의 최대공약수는 1입니다. 50과 70의 최대공약수는 10입니다. ​ ​ 끝. 카테고리: Python, python_math

Python Download a file from kaggle notebook

이미지
파이썬 Download a file from kaggle notebook을 알아보겠습니다. ​ kaggle notebook을 사용하다 이런 경우가 발생했습니다. output 파일을 받아야 하는데 버퍼링이 한정 없이 돌고 있습니다. 캐글은 사용 안 하면 자동으로 꺼지기 때문에 서둘러 저장을 해야 하는데 난감합니다. ​ 이럴 때에는 다음과 같은 방법을 사용해 줍니다. 우선 모든 파일을 압축해 줍니다. !zip -r file.zip /kaggle/working 이러면 file.zip이라는 압축 파일이 생성됩니다. 이것을 다운로드할 건데요. ​ from IPython.display import FileLink를 사용합니다. FileLink로 다운로드할 폴더명을 넣어서 실행합니다. 안될 가능성도 있는데 운이 좋기를 바랍니다. 위의 file.zip을 클릭하면 다운로드 해집니다. ​ ​ ​ 끝. 카테고리: Python

Python pandas.DataFrame.to_csv()

이미지
사용 버전: Python 3.7.9 사용 프로그램: Jupyter-lab ​ 파이썬 pandas.DataFrame.to_csv()를 알아보겠습니다. ​ 괄호 안에는 아래의 것들이 들어갑니다. pandas.DataFrame.to_csv()는 DataFrame을 csv로 저장할 때 사용합니다. ​ kaggle이나 dacon에 보면, 결과 제출을 csv로 해라는 경우가 많습니다. 이런 파일이 있는데, csv로 저장해 볼게요. 우선 path_or_buf에는 저장할 경로를 적어줍니다. 저장된 거 보이시나요? ​ ​ sep는 구분자를 의미합니다. 기본적으로 ','로 구분되는데요. 만약 다른 걸로 구분하고 싶다 하면 해당 옵션을 사용합니다.  구분자가 ',' 대신 '+'로 저장될 겁니다. Delimiter가 ','로 돼서 칸이 안 나눠져서 보이네요. na_rep은 빈 데이터를 어떻게 처리할 건지입니다. 기본이 ''이고 제 데이터에는 null이 없기 때문에 효과가 없습니다. index는 숫자를 포함할 건지를 설정합니다. 기본 값은 True이며 False를 하면 row 번호 없이 저장된 것을 볼 수 있습니다. index_label은 index 전용 label을 설정할 수 있습니다. encoding은 원하는 인코더로 저장할 수 있습니다. 기본은 'utf-8'입니다. 끝. 카테고리: Python, Pandas

Python pandas.DataFrame.replace()

이미지
사용 버전: Python 3.7.9 사용 프로그램: Jupyter-lab ​ 파이썬 pandas.DataFrame.replace()를 알아보겠습니다. ​ 괄호 안에는 이러한 것들이 들어갑니다. Python pandas.DataFrame.replace()replace()는 어떠한 값을 변경할 때 사용합니다. to_replace 값을 value로 변경합니다. ​ ​ 아래의 csv 파일을 봅시다. 5, 6 번째 줄에 숫자가 아닌 '-'가 들어 있습니다. 이렇게 되면, 분석을 하거나 데이터 타입을 변경할 때 황당합니다. 보면, Dtype이 int64가 아닌 object가 되어버렸습니다. ​ 또한, '-'는 입력이 되어 있기 때문에 null로 잡히지도 않습니다. 이 값을 0으로 변경해 봅시다. replace를 사용합니다. ​ to_replace에는 변경하려는 값을 넣습니다. 여기에는 숫자(numeric), 글자(str), 정규 표현식(regex), 배열(list), 사전(dictionary) 따위가 들어갈 수 있습니다. value에는 변경된 값을 넣습니다. 여기에는 글자(str), 정규 표현식(regex), 배열(list), 사전(dictionary) 따위가 들어갈 수 있습니다. ​ 글자(str)의 경우 데이터에 해당하는 글자들을 원하는 글자로 변경합니다. 배열(list)의 경우 해당하는 모든 값을 원하는 값으로 변경합니다. Bon에 5 가 있는데 0으로 변경되지 않은 이유는 Bon의 Dtype이 Object이기 때문입니다. 그래서 인식이 안되었습니다. ...

Python OpenCV Resize image with aspect ratio using border

이미지
사용 버전: Python 3.7.9, OpenCV 4.5.4 ​ 파이썬 OpenCV Resize image with aspect ratio using border를 알아보겠습니다. OpenCV를 활용해서 이미지 크기를 변경할 때, 가로 세로 비율을 무시하고 변경합니다. 여기서는 비율을 유지하면서 크기를 변경하는 방법과 나머지 부분을 0으로 채워(Border 또는 Padding) 정사각형 이미지로 만드는 방법을 알아볼 겁니다. ​ ​ 오늘 사용할 이미지입니다. 올해가 검은 호랑이 해이니까 백두산 호랑이를 써보죠. 케케 우선 이미지를 불러와서 봅시다. cv2.imread()는 경로에서 이미지를 불러옵니다. cv2.imshow()는 이미지를 화면에 보여줍니다. cv2.waitKey()는 키보드를 입력할 때까지 기다립니다. 이미지의 가로 크기와 세로 크기를 확인합니다. shape는 이미지 배열의 크기를 보여줍니다. 순서는 세로, 가로, 채널 순서입니다. ​ 세로가 594 픽셀, 가로가 895 픽셀, 채널이 3인 이미지입니다. 우리는 이 크기를 256x256 크기로 변경할 겁니다. 그것도 비율을 유지해서 말이죠. ​ 그럼 비율을 알아야겠죠? 비율을 구합니다. 변경할 사이즈를 이미지의 가로, 세로 둘 중에 큰 숫자와 나누어서 얼마만큼 줄여야 하는지를 구합니다. 0.2860... 정도를 우선 먼저 가로, 세로 상관없이 줄여줍니다. ​ ​ ​ 가로가 큰 지, 세로가 큰 지를 비교하여 resize를 해줍니다. 이렇게 나눠준 이유는 ratio를 곱한 값이 소수점이다 보니 올림과 내림 문제가 발생하...