본문 바로가기
Python/데이터분석

Python Pandas 2

by code2772 2023. 2. 17.

[ 목차 ]

    728x90
    반응형

    2. 데이터 기본 정보 알아보기

     
    type(df)
    
     
    pandas.core.frame.DataFrame
     

    2-1. column(열)

     
    df.columns
    
     
    Index(['이름', '그룹', '소속사', '성별', '생년월일', '키', '혈액형', '브랜드평판지수'], dtype='object')
     
    new_column = ['name','group','company','gender','birthday','height','blood','brand']
    
     
     
     
    df.columns = new_column
    df.columns
    
     
    Index(['name', 'group', 'company', 'gender', 'birthday', 'height', 'blood',
           'brand'],
          dtype='object')
     
    df
    
     
     

    2-2. row(행)

     
     
    df.index
    
     
    RangeIndex(start=0, stop=15, step=1)
     
    # 기본적인 행의 정보와 데이터타입을 확인
    df.info()
    
     
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 15 entries, 0 to 14
    Data columns (total 8 columns):
     #   Column    Non-Null Count  Dtype  
    ---  ------    --------------  -----  
     0   name      15 non-null     object 
     1   group     14 non-null     object 
     2   company   15 non-null     object 
     3   gender    15 non-null     object 
     4   birthday  15 non-null     object 
     5   height    13 non-null     float64
     6   blood     15 non-null     object 
     7   brand     15 non-null     int64  
    dtypes: float64(1), int64(1), object(6)
    memory usage: 1.1+ KB
    
     

    2-3. 통계정보 알아보기


     
    # 통계 정보를 확인: 기본값은 정수 또는 실수 컬럼만 확인
    df.describe()
    
     
     
    df.describe(include='all') # df.describe(include='object')
    
     
     
     

    2-4. 형태(shpae) 알아보기

     
    df.shape
    
     
    (15, 8)
     

    2-5. 원하는 개수의 데이터 보기

    • head(): 상위 5개의 row를 출력
    • head(n): 상위 n개의 row를 출력
    • tail(): 하위 5개의 row를 출력
    • tail(n): 하위 5개의 row를 출력
     

     
    df.head(3)
    
     
     
     
     
    df.tail()
    
     
     
     
    df.tail(3)
    
     
     

    2-6. 정렬하기

     
    # 기본값은 index로 오름차순
    
     
     
     
    # index로 내림차순 정렬
    df.sort_index(ascending=False)
    
     
     
     
    # 이름순으로 오름차순 정렬
    df.sort_values(by='name')
    
     
     
    # 이름순으로 내림차순 정렬
    df.sort_values(by='name', ascending=False)
    
     
     
     
     
    # 키순으로 내림차순 정렬, NaN을 가장 위로 올림
    df.sort_values(by='name', ascending=False, na_position='first')
    
     
     
    # 키순으로 오름차순 정렬 후 브랜드로 오름차순 정렬, NaN을 가장 위로 올림
    df.sort_values(by=['height', 'brand'], na_position='first')
    
     
     
     
    # 키순으로 내림차순 정렬 후 브랜드로 오름차순 정렬, NaN을 가장 위로 올림
    df.sort_values(by=['height', 'brand'], ascending=[False, True],na_position='first')
    
     
     
     

    3. 컬럼으로 데이터 다루기

     
     
    df.head()
    
     
     
     
    df['name']
    
     
    0       지민
    1     지드래곤
    2     강다니엘
    3        뷔
    4       화사
    5       정국
    6       민현
    7       소연
    8        진
    9      하성운
    10      태연
    11     차은우
    12      백호
    13      JR
    14      슈가
    Name: name, dtype: object
     
     
    df.name
    
     
    0       지민
    1     지드래곤
    2     강다니엘
    3        뷔
    4       화사
    5       정국
    6       민현
    7       소연
    8        진
    9      하성운
    10      태연
    11     차은우
    12      백호
    13      JR
    14      슈가
    Name: name, dtype: object
     

    3-1. 컬럼 범위 선택하기

     
    df[:3] # df.head(3)
    
     
     
    df.loc[:, 'name']
    
     
    0       지민
    1     지드래곤
    2     강다니엘
    3        뷔
    4       화사
    5       정국
    6       민현
    7       소연
    8        진
    9      하성운
    10      태연
    11     차은우
    12      백호
    13      JR
    14      슈가
    Name: name, dtype: object
     
     
    df.loc[:3, 'name'] # index 3을 포함
    
     
    0      지민
    1    지드래곤
    2    강다니엘
    3       뷔
    Name: name, dtype: object
     
     
    df.loc[:,['name', 'height']]
    
     
     
     
    df.loc[3:8, ['name','height']]
    
     
     
     
    df.loc[3:8, 'name':'height']
    
     
     
     
    df.iloc[:,[0,2]]
    
     
     
     
    df.iloc[:,0:2] # 0:2 -> index 2를 포함하지 않음
    
     
     
     
    df.iloc[1:4,0:2]
    
     
     
     
    df['height'] >= 180
    
     
    0     False
    1     False
    2      True
    3     False
    4     False
    5     False
    6      True
    7     False
    8     False
    9     False
    10    False
    11     True
    12    False
    13    False
    14    False
    Name: height, dtype: bool
     
     
    df[df['height'] >= 180]['name']
    
     
    2     강다니엘
    6       민현
    11     차은우
    Name: name, dtype: object
     
     
    df[df['height'] >= 180][['name','gender','height']]
    
     
     
    df.loc[df['height'] >= 180, ['name','gender','height']]
    
     

    3-3. isin 활용하기

    • isin은 조건을 걸고자 하는 값이 정의한 list에 있을 때만 색인하려는 경우에 사용
     
     
    company = ['플레디스', 'SM']
    
     
     
     
    df['company'].isin(company)
    
     
    0     False
    1     False
    2     False
    3     False
    4     False
    5     False
    6      True
    7     False
    8     False
    9     False
    10     True
    11    False
    12     True
    13     True
    14    False
    Name: company, dtype: bool
     
     
    df.loc[df['company'].isin(company), :] # df.loc[df['company].isin(company)]
    
     
     
     
    df.loc[df['company'].isin(company), ['name', 'company']]
    
     
     

    4. 결측값(NaN)

    • NaN은 비어있는 값 또는 결측값이라고 부름
    • pandas에서는 null을 NaN(Not a Number)으로 표기됨
     
     
    df.info()
    
     
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 15 entries, 0 to 14
    Data columns (total 8 columns):
     #   Column    Non-Null Count  Dtype  
    ---  ------    --------------  -----  
     0   name      15 non-null     object 
     1   group     14 non-null     object 
     2   company   15 non-null     object 
     3   gender    15 non-null     object 
     4   birthday  15 non-null     object 
     5   height    13 non-null     float64
     6   blood     15 non-null     object 
     7   brand     15 non-null     int64  
    dtypes: float64(1), int64(1), object(6)
    memory usage: 1.1+ KB
    
     
     
     
    # 결측값인지 아닌지 여부를 판단
    df.isna()
    
     
     
     
    # null인지 여부를 판단
    df.isnull()
    
     
     
     
    df['group'].isnull()
    
     
    0     False
    1     False
    2      True
    3     False
    4     False
    5     False
    6     False
    7     False
    8     False
    9     False
    10    False
    11    False
    12    False
    13    False
    14    False
    Name: group, dtype: bool
     
     
    df[df['group'].isnull()]
    
     
     
     
    df[df['group'].isnull()]['name']
    
     
    2    강다니엘
    Name: name, dtype: object
     
     
    df['name'][df['group'].isnull()]
    
     
    2    강다니엘
    Name: name, dtype: object
     
     
    df['name'][df['group'].notnull()]
    
     
    0       지민
    1     지드래곤
    3        뷔
    4       화사
    5       정국
    6       민현
    7       소연
    8        진
    9      하성운
    10      태연
    11     차은우
    12      백호
    13      JR
    14      슈가
    Name: name, dtype: object
     
     
    # 그룹이 있는 연예인의 이름, 키, 혈액형을 출력(단, loc을 사용)
    df.loc[df['group'].notnull(), ['name','height','blood']]
    
     
     
    new_df = df
    
     
     
     
    new_df.head()
    
     
     
     
     
    new_df['name'] = '김사과'
    
     
    new_df.head()
    
     
     
     
    df.head()
    
     
     
     
    print(hex(id(new_df)))
    print(hex(id(df)))
    
     
    0x7fc0cf262490
    0x7fc0cf262490
    
    df = pd.read_csv('http://bit.ly/ds-korean-idol')
    df
    
     
     
     
    copy_df = df.copy()
    
     
     
     
    print(hex(id(copy_df)))
    print(hex(id(df)))
    
     
    0x7fc0807163d0
    0x7fc080716700
    
     
     
    copy_df['이름'] = '김사과'
    
     
    copy_df.head()
    
     
     
    df.head()
    
     

    6. row, column 추가 및 삭제하기

     

    6-1. row 추가하기

    • dict 형태의 데이터를 만들어주고 append() 함수를 사용하여 데이터를 추가
    • 반드시 ignore_index=True 옵션을 추가해야 에러가 나지 않음

     

     
    df.append({'이름':'김사과', '그룹':'애플', '소속사':'apple','성별':'여자', '생년월일':'2000-01-01', '키': 160, '혈액형':'A', '브랜드평판지수': 12345678}, ignore_index=True)
    
     
     
     
    df = df.append({'이름':'김사과', '그룹':'애플', '소속사':'apple','성별':'여자', '생년월일':'2000-01-01', '키': 160, '혈액형':'A', '브랜드평판지수': 12345678}, ignore_index=True)
    
     
     
     
    df.tail()
    
     

    6-2. column 추가하기

     

     

    df.head()
    
    df['국적'] = '대한민국'
    
    df.head()
    
     
     
     
    df.loc[df['이름']=='김사과','국적'] = '미국'
    
     
    df.tail()
    
     
     
     

    7. 통계함수 다루기

     
    df.describe()
    
     
    df['키'].sum()
    
     
    2445.3
     
    df['키'].count() #NaN을 제외
    
     
    14
     
     
    df['키'].mean()
    
     
    174.66428571428574
     
     
    df['키'].max()
    
     
    183.0
     
     
    # 분산: 데이터가 평균으로부터 얼마나 떨어져 있는지 정도
    # (데이터-평균)**2을 모두 합한 값/데이터의 개수
    df['키'].var() # 분산
    
     
    49.08708791208794
     
     
    # 표준편차: 분산에 루트를 씌움
    df['키'].std() # 표준편차
    
     
    7.0062178036432705
     

     
    import numpy as np
    
     
    data = np.array([1, 3, 5, 7, 9])
    
     
    np.sqrt(((1-5)**2 + (3-5)**2 + (5-5)**2 + (7-5)**2 + (9-5)**2) / 5)
    
     
    2.8284271247461903
     
     
    data.std()
    
     
    2.8284271247461903
     

    8. 그룹으로 묶기

    • groupby는 데이터를 그룹으로 묶어 분석할 때 사용
     
     
    df.head()
    
     
     
    df.groupby('소속사')
    
     
    <pandas.core.groupby.generic.DataFrameGroupBy object at 0x7fc0805b2c70>
     
     
    df.groupby('소속사').count()
    
     
     
    df.groupby('소속사').mean()
    
    df.groupby('소속사').sum()
    
    # 혈액형별로 그룹을 맺고, 키의 평균값을 확인
    df.groupby('혈액형')['키'].mean()
    
     
    혈액형
    A     171.114286
    AB    176.500000
    B     183.000000
    O     177.875000
    Name: 키, dtype: float64
     
     
    # 혈액형별로 그룹을 맺고 또 성별로 그룹을 나눈 후 키의 평균값을 확인
    df.groupby(['혈액형','성별'])['키'].mean()
    
     
    혈액형  성별
    A    남자    175.140
         여자    161.050
    AB   남자    176.500
    B    남자    183.000
         여자        NaN
    O    남자    177.875
    Name: 키, dtype: float64
     

    9. 결측값 채우기

    <bound method DataFrame.info of     name  group  company gender    birthday  height blood     brand
    0     지민  방탄소년단      빅히트     남자  1995-10-13   173.6     A  10523260
    1   지드래곤     빅뱅       YG     남자  1988-08-18   177.0     A   9916947
    2   강다니엘    NaN      커넥트     남자  1996-12-10   180.0     A   8273745
    3      뷔  방탄소년단      빅히트     남자  1995-12-30   178.0    AB   8073501
    4     화사    마마무      RBW     여자  1995-07-23   162.1     A   7650928
    5     정국  방탄소년단      빅히트     남자  1997-09-01   178.0     A   5208335
    6     민현   뉴이스트     플레디스     남자  1995-08-09   182.3     O   4989792
    7     소연    아이들       큐브     여자  1998-08-26     NaN     B   4668615
    8      진  방탄소년단      빅히트     남자  1992-12-04   179.2     O   4570308
    9    하성운     핫샷  스타크루이엔티     남자  1994-03-22   167.1     A   4036489
    10    태연   소녀시대       SM     여자  1989-03-09     NaN     A   3918661
    11   차은우   아스트로     판타지오     남자  1997-03-30   183.0     B   3506027
    12    백호   뉴이스트     플레디스     남자  1995-07-21   175.0    AB   3301654
    13    JR   뉴이스트     플레디스     남자  1995-06-08   176.0     O   3274137
    14    슈가  방탄소년단      빅히트     남자  1993-03-09   174.0     O   2925442>
     
     

    반응형

    'Python > 데이터분석' 카테고리의 다른 글

    Python 데이터분석 matplotlib  (0) 2023.02.19
    Python 데이터 분석 Data Preprecessing  (0) 2023.02.18
    Pythone Pandas(판다스) 기본  (0) 2023.02.17
    Python 데이터분석 Numpy 2  (0) 2023.02.16
    Python 데이터 분석 Numpy  (0) 2023.02.16