Python Library 55

[Pandas - Python] Concatenating Along an Axis - concat() (특정 열, 행을 기준으로 연결하는 법)

데이터 프레임, 혹은 시리즈나 numpy object를 사슬처럼 연결하는 메소드인 concatenate()와 concat()에 대해 알아봅시다. arr = np.arange(12).reshape((3, 4)) arr array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) np.concatenate([arr, arr], axis=1) array([[ 0, 1, 2, 3, 0, 1, 2, 3], [ 4, 5, 6, 7, 4, 5, 6, 7], [ 8, 9, 10, 11, 8, 9, 10, 11]]) 보시다시피 axis = 1을 줌으로써, 열을 기준으로 합쳤습니다. 이제 Series에 대해서 연결해봅시다. s1 = pd.Series([0, 1], index=['a',..

[Pandas - Python] Merging on Index - merge(), join()

만약 column을 기준으로 합치려고 하는데, 합치려고 하는 컬럼이 인덱스에 있다면 어떻게 해야할까요? 우선 두 개의 데이터 프레임을 만들었습니다. left1 = pd.DataFrame({'key': ['a', 'b', 'a', 'a', 'b', 'c'], 'value': range(6)}) right1 = pd.DataFrame({'group_val': [3.5, 7]}, index=['a', 'b']) left1 keyvalue 0a0 1b1 2a2 3a3 4b4 5c5 right1 group_val a3.5 b7.0 이때 right1의 인덱스에 a,b라는 key가 들어가있습니다. 이를 해결하기 위해서는 right_index = True를 해주면 됩니다. pd.merge(left1, right1, l..

[Pandas - Python] Database-Style Dataframe Joins - merge() (데이터 베이스 병합하기)

두 개의 데이터 프레임을 생성해봅시다. df1 = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'], 'data1': range(7)}) df2 = pd.DataFrame({'key': ['a', 'b', 'd'], 'data2': range(3)}) df1 keydata1 0b0 1b1 2a2 3c3 4a4 5a5 6b6 df2 keydata2 0a0 1b1 2d2 이때 두 개의 데이터 프레임을 병합하는 merge() 함수를 사용해봅시다. pd.merge(df1, df2) keydata1data2 0b01 1b11 2b61 3a20 4a40 5a50 어떤 column을 기준으로 병합할지 명시하지 않았지만, 알아서 두 개의 데이터 프레임에 overlap..

[Pandas - Python] Indexing with a DataFrame's Columns - set_index() (데이터 프레임의 열로 인덱싱 하는 법)

frame = pd.DataFrame({'a': range(7), 'b': range(7, 0, -1), 'c': ['one', 'one', 'one', 'two', 'two', 'two', 'two'], 'd': [0, 1, 2, 0, 1, 2, 3]}) frame abcd 007one0 116one1 225one2 334two0 443two1 552two2 661two3 원본 데이터 입니다. 이때 c, d를 인덱스로 설정하고 싶다면, frame.set_index(['c', 'd']) 하면 됩니다. frame2 = frame.set_index(['c', 'd']) frame2 ab cd one007 116 225 two034 143 252 361 보시다시피 c와 d를 기준으로 인덱스가 설정되었습니다. ..

[Pandas - Python] Hierarchical Indexing (계층적 인덱싱)

Hierarchical Indexing 계층적 인덱싱이란, a라는 인덱스 안에 1, 2, 3이라는 인덱스가 있고, c라는 인덱스 안에 또 1, 2, 3가 있는 그런 형태입니다. 예를 들어 홍길동이라는 이름이 있다고 가정해봅시다. 물론 남자 같은 이름이지만 여자가 있을 수도 있습니다. 남자 인덱스 안에 [홍길동, 24] 이런 식으로 넣고, 여자 인덱스 안에 [홍길동, 23] 이런 식으로 넣을 수 있습니다. 이때 사용하는 것이 Hierarchical Indexing 입니다. data = pd.Series(np.random.randn(9), index=[['a', 'a', 'a', 'b', 'b', 'c', 'c', 'd', 'd'], [1, 2, 3, 1, 3, 1, 2, 2, 3]]) data a 1 -0..

[Pandas - Python] Computing Indicator/Dummy Variables - get_dummies() (더미 데이터 만들기)

Computing Indicator/Dummy Variables - get_dummies() 왜 더미 데이터를 만들까요? 머신러닝에 데이터를 넣기 위해서는 수치화가 필수입니다. 머신러닝은 월요일, 화요일 같은 문자열을 모르기 때문입니다. 만약에 월요일이 1이고, 화요일이 2, 수요일이 3이라고 가정해봅시다. 월요일과 화요일, 수요일은 그 어떤 연관성도 없지만, 이를 수치화하면 1 + 2 = 3이라는 연관성이 생기게 됩니다. 월요일 + 화요일 = 수요일? 원래 데이터는 전혀 연관성이 없는데도 불구하고, 이를 수치화 시키면 연관성이 생겨버리게 됩니다. 이때 더미 데이터를 만듬으로써 그러한 문제를 방지해줍니다. 즉 One-Hot Encoding을 하는 것과 마찬가지라고 보면 될 것 같습니다. df = pd.D..

[Pandas - Python] Permutation and Random Sampling - permutation(), sample() (순열 및 무작위 샘플링)

Permutation and Random Sampling - permutation(), sample() 랜덤 순열을 이용하여 데이터를 볼 수 있습니다. df = pd.DataFrame(np.arange(5 * 4).reshape((5, 4))) sampler = np.random.permutation(5) sampler array([4, 0, 2, 3, 1]) 이처럼 5개의 순열을 랜덤으로 섞은 뒤, df.take(sampler)를 하면 행이 섞입니다. df.take(sampler) 0123 416171819 00123 2891011 312131415 14567 만약 df에서 랜덤으로 3개를 샘플링 하고 싶다면, sample(n = 3)을 쓰면 됩니다. df.sample(n=3) 0123 41617181..

[Pandas - Python] Detecting and Filtering Outliers (데이터 필터)

Detecting and Filtering Outliers 이번에는 특정 범위를 넘어가는 데이터를 추출해보겠습니다. data = pd.DataFrame(np.random.randn(1000, 4)) data.describe() 0123 count1000.0000001000.0000001000.0000001000.000000 mean-0.0474390.0460690.024366-0.006350 std0.9971870.9983591.0089250.993665 min-3.428254-3.645860-3.184377-3.745356 25%-0.743886-0.599807-0.612162-0.697084 50%-0.0863090.043663-0.013609-0.026381 75%0.6244130.7465270.6..

[Pandas - Python] Discretization and Binning - cut() (이산화 및 분류)

Discretization and Binning - cut() 데이터를 특정 범위에 따라 분류하는 법에 대해 알아보겠습니다. ages = [20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 41, 32] bins = [18, 25, 35, 60, 100] cats = pd.cut(ages, bins) cats [(18, 25], (18, 25], (18, 25], (25, 35], (18, 25], ..., (25, 35], (60, 100], (35, 60], (35, 60], (25, 35]] Length: 12 Categories (4, interval[int64, right]): [(18, 25] < (25, 35] < (35, 60] < (60, 100]] cut 함수를 통..

[Pandas - Python] Renaming Axis Indexes - rename() (축의 인덱스 이름 변경)

Renaming Axis Indexes - rename() 이번에는 축의 인덱스 이름을 변경해보겠습니다. data = pd.DataFrame(np.arange(12).reshape((3, 4)), index=['Ohio', 'Colorado', 'New York'], columns=['one', 'two', 'three', 'four']) data onetwothreefour Ohio0123 Colorado4567 New York891011 transform = lambda x: x[:4].upper() data.index.map(transform) Index(['OHIO', 'COLO', 'NEW '], dtype='object') index의 4번째 글자까지 대문자로 변경했습니다. data.index..