Python/NumPy | Pandas 66

[Pandas] explode - 데이터형이 리스트인 컬럼 전개

개요 아래와 같이 데이터형이 리스트인 컬럼을 포함하는 데이터프레임이 있다고 하자. df = pd.DataFrame({'A': [[0, 1, 2], 'foo', [], [3, 4]], 'B': ['a', 'b', 'c','d'], 'C': [['a', 'b', 'c'], np.nan, [], ['d', 'e']], }) 리스트인 컬럼을 여러 행으로 펼쳐서 A와 B가 1 : 1 매핑이 되도록 변경하고 싶다. 방법을 알아본다. DataFrame.explode explode 함수는 리스트와 유사한 각 요소를 행으로 변환한다. DataFrame.explode(column, ignore_index=False) column 매개변수에는 분할할 컬럼을 지정하는데 단일 문자열이나 튜플로 지정할 수 있다. 단, 튜플로 지..

[Pandas] 데이터형이 리스트인 컬럼 empty 여부 확인

개요 데이터형이 리스트인 컬럼을 데이터프레임이 있다고 하자. 컬럼의 리스트가 비어있지 않은 행만 필터링하고 싶다. 방법을 적어둔다. 예시 데이터프레임 import pandas as pd df = pd.DataFrame({"col": [[1], [2, 3], [], [4, 5, 6], []]}) 이 데이터프레임을 필터링하여 인덱스가 0, 1, 3인 행만 남기려고 한다. 방법 1. str.len으로 리스트 길이 확인 str.len을 활용하면 리스트의 길이를 확인할 수 있다. print(df['col'].str.len()) 이를 이용하여 리스트의 길이가 0이 아닌 행만 필터링한다. df[df['col'].str.len() != 0] 다만 벡터화 연산을 사용한 것이 아니기 때문에 데이터프레임의 크기가 크다면 실..

[Pandas] compare - DataFrame 비교

개요 2024.02.09 - [Pandas] DataFrame 비교 - equals에 이어서 DataFrame을 비교할 수 있는 방법 중 하나인 compare에 대해 정리한다. DataFrame.compare DataFrame.compare 함수는 데이터프레임 간 일치 여부를 반환하는 equals와 달리 데이터프레임 간 차이점을 반환한다. DataFrame.compare(other, align_axis=1, keep_shape=False, keep_equal=False, result_names=('self', 'other')) - other : 비교할 데이터프레임 - align_axis: 비교 결과 정렬 축 - keep_shape : True이면 같은 값을 가진 셀도 포함하여 출력한다. - keep_eq..

[Pandas] sort_values - DataFrame 값 기준 정렬

개요 DataFrame을 특정 컬럼들을 기준으로 정렬하고 싶다. 방법을 적어둔다. + 이전에 2022.12.20 - [Python] Pandas - 데이터프레임 데이터 조작 1에서 적어두긴 했지만…… 검색에 걸리지도 않아서 다시 작성한다! DataFrame.sort_values DataFrame.sort_values 함수는 값을 기준으로 데이터프레임을 정렬한다. DataFrame.sort_values(by, *, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None) - by : 정렬 기준. 문자열 또는 리스트로 전달한다. - axis : 정렬 축. 0 또는 index이..

[Pandas] DataFrame 비교 - equals

개요 어떤 데이터가 처리되던 방식을 변경하려고 한다. 변경된 처리 방식을 적용하기 전에 기존 방식으로 처리된 데이터와 새로운 방식으로 처리된 데이터가 동일한지 확인하고 싶다. 각 방식으로 처리된 DataFrame을 비교하면 될 것 같아, 이 글에서 DataFrame을 비교하는 여러 방법 중 equals 함수 사용법에 대해 정리한다. DataFrame.equals equals 함수는 DataFrame 또는 Series를 서로 비교하여 동일한지 확인한다. 만약 NaN이 동일한 위치에 있다면 같은 것으로 취급한다. 두 객체의 모든 요소가 동일하면 True, 그렇지 않으면 False를 반환한다. 테스트 1. 같은 데이터로 생성한 DataFrame 비교 data = { 'brand': ['Yum Yum', 'Yu..

[Pandas] DataFrame 중복 확인/제거

개요 데이터를 병합하는 과정에서 데이터가 증가하는 경우가 있었는데, 아무래도 DataFrame에 존재하는 중복 데이터가 원인인 것 같다. DataFrame에서 중복 데이터를 확인하고 제거하는 방법에 대해 적어둔다. 예시 데이터 위의 데이터를 예시로 중복된 데이터를 확인하고, 제거해 보자. import pandas as pd df = pd.DataFrame({ 'brand': ['Yum Yum', 'Yum Yum', 'Indomie', 'Indomie', 'Indomie'], 'style': ['cup', 'cup', 'cup', 'pack', 'pack'], 'rating': [4, 4, 3.5, 15, 5] }) duplicated DataFrame.duplicated 함수는 전달받은 컬럼을 대상으로 ..

[Pandas] DataFrame 행(row) 순회

개요 데이터를 Pandas 데이터프레임으로 처리하려고 하는데, 데이터프레임 행 전체를 순회하면서 처리해야 하는 작업이 발생했다. 데이터프레임 행 순회를 하는 방법을 간단히 정리해 둔다. 물론 데이터프레임의 크기가 클수록 순회하는 것보다 벡터화 연산으로 처리하는 것이 유리하다. 인덱싱 아래와 같은 데이터프레임이 있다고 하자. import pandas as pd df = pd.DataFrame({ '고객번호': [1001, 1002, 1003, 1004], '이름': ['둘리', '도우너', '또치', '길동'] }, columns=['고객번호', '이름']) 데이터프레임의 인덱스 정보는 index 속성으로 접근할 수 있다. for문으로 데이터프레임의 인덱스 정보를 순회하면서 loc, iloc 등을 이용해 ..

[Pandas] DataFrame CROSS JOIN

CROSS JOIN CROSS JOIN은 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인하는 것을 뜻하며, 두 테이블의 각 행의 개수를 곱한 만큼의 결과가 나온다. Pandas DataFrame을 join 하는 법은 2022.12.25 - [Python] Pandas - 데이터프레임 합성 1 (merge / join)에서 살펴보았는데, cross join에 대해서는 정리하지 않아서 추가로 정리한다. pandas 1.2 이상의 버전인 경우 위의 예시 그림처럼 hair type과 hair style 두 개의 DataFrame이 있다고 하자. import pandas as pd import numpy as np hair_type = pd.DataFrame({'Hair Type' : ['A', 'B'..

[Python] Pandas - datetime64 Series를 datetime.datetime으로 변환

개요 다음과 같은 날짜 데이터로 이루어진 DataFrame이 있다고 하자. import pandas as pd import numpy as np date_str = ["2018, 1, 1", "2018, 1, 4", "2018, 1, 5", "2018, 1, 6"] df = pd.DataFrame(pd.to_datetime(date_str), columns=['diagnosis_date']) 이 날짜 데이터를 Python의 datetime 타입의 데이터를 원소로 하는 리스트로 변환하고자 다음과 같이 실행하면…… list_date = df['diagnosis_date'].values.tolist() 이런 숫자값이 나온다. 아무래도 Timestamp로 취급된 것 같다. 어떻게 해야 datetime 객체를 원..

[Python] Pandas - 여러 컬럼 추가

개요 DataFrame에 스칼라 값인 컬럼이 여럿 추가하고 싶을 때는 단순 할당을 반복하거나, import numpy as np import pandas as pd map_code_message = [ {'code':'00','return_message':'Continue'}, {'code':'01','return_message':'Switching Protocol'}, {'code':'02','return_message':'Processing'}, {'code':'03','return_message':'Early Hints'}, ] df = pd.DataFrame(map_code_message) df['server'] = 'web' df['stage_env'] = 'dev' insert 함수를 반복해서..

1 2 3 4 5 ··· 7