파이썬(Python)&판다스(Pandas)&Polars 25

[polars] 셀 안의 문자열 또는 리스트 값 모두 보이게 출력(polars.Config.set_fmt_str_lengths, max_colwidth)

polas에서 데이터프레임을 출력하면 긴 문자열을 아래 사진처럼 끊긴다 pandas에서는 max_colwidth을 쓰면 해결됐었음 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.option_context.html pandas.option_context — pandas 2.1.3 documentation next pandas.option_context.__call__ pandas.pydata.org polars의 문법 pl.Config.set_fmt_str_lengths(200) 공식 홈페이지의 예시 코드 df = pl.DataFrame( { "txt": [ "Play it, Sam. Play 'As Time Goes By'.", "T..

[polars] 데이터프레임의 특정 컬럼 또는 모든 컬럼의 데이터 타입 변경하기(cast)

공식홈페이지 기본 문법 df.cast({"foo": pl.Float32, "bar": pl.UInt8}) 모든 데이터의 형식을 str(문자열)로 바꾸기 -> utf8 df = df.with_columns(pl.all().cast(pl.Utf8, strict=False)) with_columns로 모든 컬럼(pl.all())을 불러오고, 모든 컬럼의 데이터 타입을 cast로 지정해 변환함 strict는 예외발생시 강제로 수행할 것인가를 지정함 (참고용) 리스트 안에 있는 값을 str으로 변환하는 코드 출처: https://stackoverflow.com/questions/75628413/cast-column-of-type-list-to-str-in-polars df.with_columns(pl.col("f..

[polars] write_csv로 UTF-8-SIG 처럼 저장하기(include_bom)

pandas와 다르게, index가 포함되지 않고 저장됨 # 기본 코드 df.write_csv("파일명.csv") 판다스는 인코딩을 특정해서 저장할 수 있지만, polars는 현재(2023-11-21) 지원하지 않음 대신, 계속 업데이트 중이라서 최근 `include_bom` 변수로 윈도우의 인코딩을 지원할 수 있게 되었음 (polars 0.19.15 버전 기준) https://github.com/pola-rs/polars/pull/12253 df.write_csv("파일명.csv", include_bom=True) 이외의 파라미터는 공식홈페이지를 참고 아래는 단순 번역한 내용임 (최신 라이브러리라서, 계속 변경될 가능성이 높음) parameter: - file (파일): 결과가 기록될 파일 경로 또는 ..

[polars] with_columns(), map_elements(=apply) 컬럼 전처리 후 새로운 컬럼 만들기

모두 null값이 없는 컬럼이라면 아래와 같이 사용할 수 있음 df = df.with_columns(새컬럼 = pl.col('참조컬럼1') + pl.col('참조컬럼2')) null값이 존재하는 행을 처리하려면 when, then, otherwise 사용 df = df.with_columns(새컬럼 = pl.when(pl.col('참조컬럼2') != None).then(pl.col('참조컬럼1') + pl.col('참조컬럼2')).otherwise(None)) 참조컬럼2에 null(None)이 아니면 (when) 참조컬럼1+참조컬럼2의 값을 기입(then) 참조컬럼2에 null(None)이면 (when) 참조컬럼1+참조컬럼2의 값이 아니라(otherwise) None을 기입 apply(=map_eleme..

[polars] read_csv, 특정 문자열을 None 처리, dtypes 설정

csv 파일을 읽어올 때, 특정 문자열을 None으로 바꾸기 df = pl.read_csv("data.csv", dtype=str, na_values=["", " "]) 참고: stackoverflow df = pl.read_csv("test.csv", infer_schema_length=0).with_columns(pl.all().cast(pl.Utf8, strict=False)) 데이터프레임이 이미 생성된 경우, 특정 문자열을 None으로 바꾸기 df = df.with_columns( pl.when(pl.col(pl.Utf8) == "") .then(None) .otherwise(pl.col(pl.Utf8)) # keep original value .name.keep() ) 여러 문자열 중 하나라도 ..

[Python] 여러 딕셔너리(dictionary)를 하나의 딕셔너리로 합치기

**는 Python에서 unpacking operator로 사용됩니다. 딕셔너리 unpacking을 할 때, **를 사용하면 딕셔너리 안의 key-value 쌍들을 분리해서, 해당 key와 value를 변수들에 각각 할당할 수 있다. 예를 들어, 다음과 같이 두 개의 딕셔너리를 하나로 합치고 싶을 때, dict1 = {'a': 1, 'b': 2} dict2 = {'c': 3, 'd': 4} **를 사용하여 unpacking하면 다음과 같이 작성할 수 있다. combined_dict = {**dict1, **dict2} print(combined_dict) # {'a': 1, 'b': 2, 'c': 3, 'd': 4} 이처럼 **를 사용하면 여러 개의 딕셔너리를 하나로 합치기 쉬워지며, 만약 키 값이 중복..

[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] 행정구역 추출하여 새로운 컬럼으로 정보 추가하기 str.cat()

목적 행정구역명 (시도명, 시군구명)이 포함된 특정 CSV, Excel 파일이 존재함 해당 파일에 특정 시도명, 시군구명이 포함된 셀이 있는지 찾고 새로운 데이터 프레임에 해당 파일명과 포함된 시도, 시군구 정보를 생성하기 행정구역 파일 불러오기 행정기관(행정동) 및 관할구역(법정동) 변경내역(2023. 3. 30.) juso_df = pd.read_excel('D:\행정구역추출\jsocde20230330\jsocde20230330\KIKmix.20230330.xlsx') 시도 리스트, 시군구 리스트, 읍면동 리스트 만들기 sido_list = list(juso_df.시도명.unique()) sido_list.remove('동해출장소') sido_list.remove('북부출장소') # nan 값 삭제 ..

[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]