pandas 8

[Python&Pandas] 유사한 문자열을 매칭하는 파이썬 라이브러리(difflib)

Python에서는 difflib 라이브러리와 pandas 라이브러리를 활용하여 비슷한 문자열을 매칭할 수 있다. 데이터프레임에서 difflib을 사용한 문자열 매칭 예를 들어 df1의 '주소' 컬럼이 있고, '서울특별시 관악구 남부순환로'라는 값이 있다. 그리고, 내가 매칭하려는 값은 '서울특별시 남부순환로'라면, str.contains는 띄어쓰기를 포함하기 때문에 찾을 수 없다. difflib 라이브러리는 시퀀스 데이터를 비교하고 찾는 데에 사용됨. 특히 get_close_matches 함수는 비슷한 문자열을 찾을 수 있다. import difflib import pandas as pd # 가상의 데이터프레임 생성 data = {'주소': ['서울특별시 관악구 남부순환로', '서울특별시 강남구 테헤란로..

[Pandas] 두 개의 데이터프레임에서 특정 문자열이 포함된 행 제거하기(~, isin)

판다스(Pandas)를 사용하여 데이터를 다루다 보면 두 개의 데이터프레임을 조합하거나 특정 조건을 충족하는 행을 제거하는 작업이 필요할 때가 있다. 이번 글에서는 두 데이터프레임을 비교하여 특정 문자열이 포함된 행을 제거하는 방법을 소개한다. 코드 설명 # 필요한 라이브러리 불러오기 import pandas as pd # 두 개의 데이터프레임 생성 (예시 데이터) df1 = pd.DataFrame({'기관명': ['기관1', '기관2', '기관3', '기관4'], '값': [1, 2, 3, 4]}) df2 = pd.DataFrame({'기관명': ['기관2', '기관4'], '값': [10, 20]}) # df2의 기관명이 포함된 행 제거 df3 = df1[~df1['기관명'].isin(df2['기관명..

[Pandas] 빈 값(NaN, None)에 원하는 값 채우기(pd.where)

pd.where(조건문, 실행문) 형태로 빈 값에 원하는 값을 채울 수 있다. np.nan와 None을 통일시키고 싶을 때 사용할 수 있음 df = df.where(pd.notnull(df), None) where를 사용해서 다양한 조건문으로 데이터를 조작할 수 있음 >>> s = pd.Series(range(5)) >>> s.where(s > 0) 0 NaN 1 1.0 2 2.0 3 3.0 4 4.0 dtype: float64 >>> s.mask(s > 0) 0 0.0 1 NaN 2 NaN 3 NaN 4 NaN dtype: float64 아래 공식문서를 참고 https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.where.html pandas.D..

[Pandas] groupby, agg 여러 행을 단일 행의 리스트로 넣기

pandas의 explode 함수의 반대 기능을 하는 코드를 소개합니다. chatGPT의 도움을 받아 작성된 코드입니다. 문자열을 단일 행에 리스트로 합치는 방법은 다음과 같이 groupby와 agg를 사용하여 구현할 수 있습니다. import pandas as pd # 예시 데이터프레임 df = pd.DataFrame({ 'id': [1, 1, 2, 2], 'text': ['hello', 'world', 'foo', 'bar'] }) # 문자열을 합쳐서 리스트로 만들기 grouped = df.groupby('id')['text'].apply(list).reset_index(name='text_list') 위 코드에서 groupby를 사용하여 id를 그룹으로 지정하고, agg 함수 대신 apply 함수를..

[Pandas] explode 단일 행을 여러 행으로 나누기

❗❗chatGPT를 사용하여 예시 데이터 프레임과 아래와 같이 프롬프트를 작성하여 얻은 코드입니다.❗❗ "'다운로드명'은 중복으로 생성하고 '시도명'에 있는 리스트값을 한행씩 쪼개는 코드를 작성해줘" 아래와 같이 explode 함수를 사용하여 시도 컬럼을 리스트에서 한 행씩 쪼개서 중복된 다른 컬럼의 값과 함께 표현할 수 있습니다. import pandas as pd # 데이터프레임 생성 data = {'다운로드파일명': ['부산1_부산광역시_건축사사무소 현황_20220719.CSV', '부산2_부산광역시_도시공간정보시스템_도로안내시설_20210720.CSV', '부산4_부산광역시_도시공간정보시스템_지하시설_20220711.CSV', '부산6_부산광역시_부산도시공간정보시스템_도로상하수도기반시설물_업체정보..

[Pandas] 여러 파일의 행 수, 열 수를 하나의 데이터 프레임으로 만들기(listdir(), shape())

file_list = os.listdir() file_list = [file for file in file_list if file.endswith(".txt")] # 확장자 print(file_list) df = pd.DataFrame() df["파일명"] = file_list df["행 수"] = None df["열 수"] = None for i in range(len(df)): file = df['파일명'][i] tmp = pd.read_csv(file, sep="|", low_memory=False, encoding="cp949") # 인코딩 선택 df['행 수'][i] = tmp.shape[0] df['열 수'][i] = tmp.shape[1]

[Pandas] 한글 깨짐 방지를 위해 인코딩은 'UTF-8-SIG'로 저장하기

pandas를 사용한지 2년이 넘었지만, 사소한 부분에서 모르고 넘어간 부분이 많았다. 한글 인코딩은 'utf-8' 또는 'cp949'로 저장된 데이터가 많은것은 알고있었지만, 흔히 'utf-8'로 저장한 csv나 excel 파일을 열면 한글 깨짐의 상태로 열린다. MS excel 365에서 깨지지 않게 보기 위해선 '데이터 > 데이터 가져오기 > 파일에서 > 텍스트/csv에서'를 클릭해 불러오고자하는 데이터를 선택하면 된다. 그 동안 이 방법으로 번거롭게 열었는데, 최근 'UTF-8-SIG'로 저장하면 파일형식간의 호환을 지원해주어 깨지지않고 바로 열 수 있다는 걸 알게 됐다. import pandas as pd # 데이터 프레임 만들기 df = pd.DataFrame(data=sample_data) ..

[Pandas] '', NaN 값을 None으로 변환하기

데이터 전처리를 위해서, 조건절에서 None을 기준으로 데이터를 판단하는 경우가 많다. 하지만, Pandas로 데이터프레임을 불러오는 과정에서 Null 값의 처리가 제대로 되지않으면 원하는 결과를 낼 수 없다. 보통 np.NaN 또는 None을 기준으로 null 값 처리하기 때문에 이 글은 None값 처리를 하는 코드의 예시이다. import pandas as pd import numpy as np # 데이터 불러오기 path = r'파일경로' df = pd.read_csv(path,keep_default_na=False, # 빈 값은 None값으로 불러오기 na_values = ['?', '??', 'N/A', 'NA', 'nan', 'NaN', '-nan', '-NaN', 'null','None', ..