본문 바로가기

Python/pandas

(3)
[pandas] TypeError: unsupported operand type(s) for *: 'float' and 'decimal.Decimal' 해결기 문제 발단 rel(상관 O) 컬럼의 값에는 1을, irrel(상관 X) 컬럼의 값에는 -0.2 값을 곱하여 더한 뒤, total_cnt로 나눠 표준화를 하고자 할 때 아래 코드를 사용했다. df['score'] = df.apply(lambda x: (x['rel']*1 - 0.2*x['irrel'])/x['total_cnt'], axis=1) 이때 발생했던 오류가 바로 TypeError: unsupported operand type(s) for *: 'float' and 'decimal.Decimal' 이다. 해당 오류는 pandas의 DataFrame에 .apply() 메서드를 사용할 때 발생했던 오류로, 파이썬에서 float 타입과 decimal.Decimal 타입 사이의 연산을 지원하지 않기 때문에..
[pandas] 두 개의 DataFrame을 SQL처럼 JOIN 하는 방법 python으로 데이터를 분석하거나, SQL 디버깅 작업 중 pandas를 많이 사용하는데, 사이즈가 다른 두 개의 DataFrame을 하나의 컬럼을 기준으로 SQL처럼 JOIN 문을 사용하듯이 JOIN을 수행할 수 있다. Inner Join 예를 들어, 아래와 같이 df1과 df2 두 개의 DataFrame이 있다고 가정해보자. import pandas as pd df1 = pd.DataFrame({'k_id': [1, 2, 3, 4], 'A': [10, 20, 30, 40]}) df2 = pd.DataFrame({'k_id': [2, 3], 'B': [50, 60]}) 이제 두 개의 DataFrame을 Inner Join 하기 위해서는 merge() 함수를 사용한다. 이때, on 파라미터에 기준이 되..
[python] pandas DataFrame Index 초기화 pandas의 iloc(loc) 메서드나 groupby 메서드를 사용하다보면 DataFrame의 특정 행마다 Index의 연속성이 끊어질 때가 있다. 특히 groupby 메서드로 그루핑한 뒤 각 그룹별로 Index를 새로 0 부터 만들고 싶을 때 reset_index 메서드를 사용하면 된다. 아래 코드는 과일 종류가 '사과', '포도', '배'가 있다고 가정할 때, 각각의 당도가 3, 3, 5인 DataFrame을 예시로 든다. # col_0, col_1 을 각 컬럼으로 하는 DataFrame df = pd.DataFrame({'과일': ['사과', '포도', '배'], '당도': [3, 3, 5]}) 결과 과일당도 0사과3 1포도3 2배5 위에서 만든 DataFrame(df)에서 '당도'를 기준으로 그..