본문 바로가기

반응형

Computer/Pandas

(14)
Pandas 문자열 찾기 Pandas에서는 문자열 데이터 타입도 지원하다 보니 이름, 제품 식별자, 코드 등으로 문자열을 분석하는 전 처리하는 경우가 많습니다. 특히, 특정 열의 문자열에서 어떤 기호나 이름을 찾는 일이 빈번한데요, 보통 stip 함수로 문자열 공백을 지우고 find 함수로 관심 있는 패턴을 찾게 됩니다. 이런 작업을 할 수 있는 방법이 여러 가지인 만큼 더 효율적인 방법 또한 존재할 텐데요, 이번 포스트에서는 특정 열의 숫자에 숫자 9가 있다면 몇 번째에 위치하는지 알고 싶어 하는 예로 살펴보겠습니다. 지난 포스트의 사용한 예제를 이용해 임의의 실수를 문자열로 변환한 열을 생성합니다. 첫 번째 소수와 소수점을 제거하고 find 함수로 9의 위치를 찾습니다. 만약 9가 없다면 -1을 반환합니다. 여러 데이터 행에..
Pandas Series, DataFrame 이어 붙이기 여러 데이터 행에 함수 적용하기 Pandas를 사용하다보면 특정 함수를 여러 행에 적용하는 경우가 굉장히 많습니다. 일반적인 for 루프나 Pandas의 iterrows 이터레이터 등을 활용할 수 있지만 행이 굉장히 많은 경우에는 많이 느리게 hongl.tistory.com 지난 포스트에서는 여러 데이터 행에 대해 OLS 함수를 적용하는 여러 방법을 살펴 봤습니다. 이때 매 행마다 반복적으로 OLS를 적용하는 다음 코드를 보면 매번 Series를 만들지 않고 부분 결과의 리스트를 만든 다음에 마지막 단계에서 Series로 변환합니다. 매번 Series를 만들고 이어 붙여도 되지 않을까요? for row_idx in range(df.shape[0]): row = df.iloc[row_idx] m = ols..
여러 데이터 행에 함수 적용하기 Pandas를 사용하다보면 특정 함수를 여러 행에 적용하는 경우가 굉장히 많습니다. 일반적인 for 루프나 Pandas의 iterrows 이터레이터 등을 활용할 수 있지만 행이 굉장히 많은 경우에는 많이 느리게 됩니다. 어떤 방법이 제일 효율적일까요? 통신사의 예를 들어봅시다. 통신사에는 고객별로 일별 통화 사용량 정보가 있고 각 고객이 통화를 점점 더 많이 혹은 더 적게 하는지 알고 싶다고 합시다. 그렇다면 일반 최소 제곱 (OLS, Ordinary, Least Square) 방법을 적용해서 고객별 일별 통화 사용량 데이터에 직선을 맞추고 그 직선의 기울기를 통해 판단할 수 있겠죠. (고객별로 일차 추세선 함수를 만들면 됩니다) 이제 실험에 사용할 데이터를 만듭니다. 푸아송 분포를 이용해 데이터 만들기..
Pandas groupby (3) Pandas groupby (1) Pandas groupby (2) Pandas groupby 함수는 dataframe 자료구조에만 사용가능한 함수가 아닌 series 자료구조에도 사용가능합니다. 일반적으로 dataframe(df).groupby(칼럼 이름) 형식으로 사용하지만 1차원 numpy array, 리스트, 시리즈 같은 array-like 자료구조들도 groupby 함수 인자로 들어갈 수 있다는 것이죠. 이번에는 수천 개의 뉴스 자료들을 모은 News Aggregator 데이터를 이용해보도록 하겠습니다. Seperator를 탭으로 지정해주고 칼럼, dtype, date 칼럼 등을 지정해줍니다. import datetime as dt import pandas as pd def parse_milli..
Pandas - SettingWithCopyWarning Pandas를 사용해 데이터를 처리하다보면 생성한 데이터프레임에 대해 특정 조건에 따라 값을 재할당하는 경우가 많습니다. 예를 들어 다음과 같은 데이터프레임에 대해서 z 칼럼이 50 미만인 값을 0으로 치환하고 싶다고 합시다. >>> data = {"x": 2**np.arange(5), "y": 3**np.arange(5), "z": np.array([45, 98, 24, 11, 64])} >>> df = pd.DataFrame(data=data, index=["a", "b", "c", "d", "e"]) >>> df x y z a 1 1 45 b 2 3 98 c 4 9 24 d 8 27 11 e 16 81 64 일반적인 방법으로는 df['z'] < 50 구문으로 boolean 마스크를 생성하고 필터링을..
Pandas groupby (2) Pandas groupby (1) 지난 포스트에서 pandas groupby 함수의 동작 원리, split-apply-combine에 대해 알아봤습니다. 궁금한 점은 apply 단계에서 단 하나의 operation만 적용할 수 있는 것일까요? 그리고 구현된 mean, median, count 등의 함수 말고 우리가 따로 구현한 통계치는 어떻게 볼 수 있을까요? 이것은 GroupBy 객체에 .agg (aggregation) 메소드를 통해 실행할 수 있습니다. 지난 포스트와 같은 데이터를 이용해 state, gender에 대해 groupby를 수행하고 last_name, first_name, party 칼럼에 대해서 통계치를 보도록 하겠습니다. grouped = df.groupby(['state', 'gen..
Pandas groupby (1) 엑셀, csv 데이터를 다루면서 특정 칼럼 값이 같은 행들만 추리는 작업을 많이 해보셨을겁니다. 엑셀에서는 filter 기능을 이용해 손쉽게 할 수 있지만 pandas 라이브러리에서는 groupby 함수를 이용해야 하는데요, 처음 groupby 함수를 사용하다보면 동작 방식이 명확히 이해되지 않았습니다. 이번 포스트에서는 미국 역대 의원 정보를 담은 다음 데이터를 이용해서 pandas groupby 함수의 동작 방식을 살펴보도록 하겠습니다. 먼저 데이터를 읽습니다. 문자열로 되어있는 칼럼은 공간효율성을 위해 category 타입으로 dtype을 정의합니다. import pandas as pd dtypes = { "first_name": "category", "gender": "category", "typ..
Pandas Categorical Data 범주형 데이터는 굉장히 많이 존재합니다. 보통 pandas를 이용해 csv나 엑셀파일을 읽어드리면 범주형 컬럼은 pandas에서 문자열을 나타내는 object 타입으로 잡히게 됩니다. 하지만 문자열 자체는 메모리에서 차지하는 공간이 다른 원시타입에 비해 큰 편이고 범주 개수만큼의 문자열이 반복된다면 메모리를 비효율적으로 사용하고 있는 것이겠죠. 이럴 경우에는 pandas의 categorical 타입을 이용할 수 있습니다. 먼저 다음과 같이 5개의 범주를 가진 데이터를 생성하고 sys.getsizeof() 함수를 이용하여 메모리 사용량을 알아보겠습니다. >>> colors = pd.Series([ ... 'periwinkle', ... 'mint green', ... 'burnt orange', ... '..

반응형