본문 바로가기
Study/Python

Pandas 기본 활용법

by 까망우동 2023. 5. 26.
반응형

Pandas는 DataFrame, Series 형태의 객체로 데이터를 읽고 쓰고 분석하기 위한 중요한 라이브러리이다. 

Index

     

     

    파일 불러오기 (csv → DataFrame) 

    titanic_df = pd.read_csv('titanic_train.csv')  # 같은 디렉토리 
    csv_test = pd.read_csv('C:/Users/Administrator/Documents/Python/test_csv_file.csv') #다른 디렉토리
    
    titanic_df.head(3)
    titanic_df['Pclass'].value_counts()  # 지정된 칼럽의 데이터 값 별 건수를 반환, NULL 개수까지 새려면 dropna=Fa
    titanic_df['Pclass'] # 특정 컬럼으로 선정하면 Series 타입이됨

     

    데이터(DataFrame 형식의) 구조 및 통계값 등 파악 

    print('type:',type(titanic_df),'shape:',titanic_df.shape,'\n')
    titanic_df.info()  #칼럼 정보, 데이터 타입과 건수, Null 개수 등 파악가능
    titanic_df.describe()  # 숫자형 컬럼에 대해서 통계값을 보여줌

     

    DataFrame ↔ 리스트/ndarray/딕셔너리 간 상호변환 

    리스트, 배열(ndarray),딕셔너리 → DataFrame 
    
    col = ['c1','c2','c3']
    list2 = [[1,2,3],[4,5,6]]
    array2 = np.array(list2)
    #print(list2, array2, sep='\n')
    df_list2 = pd.DataFrame(list2, columns = col) # DataFrame 생성방식, 컬럼지정안하면 0,1,2...
    df_array2 = pd.DataFrame(array2, columns = col)
    print(df_list2, df_array2, sep='\n')
    
    dict = {'c1':[1,4],'c2':[2,5],'c3':[3,6],'c4':[4,7] } # key 는 칼럼, value 는 데이터로 매핑됨 
    df_dict = pd.DataFrame(dict) # key를 컬럼, value를 데이터로 자동으로 인식함
    DataFrame → 리스트, 배열(ndarray),딕셔너리
    
    array_df = df.values # values 를 활용한 ndarray 로의 변환 
    print(array_df, type(array_df), array_df.shape)
    
    list3 = df.values.tolist() # ndarray 변환하고 list 로 변환 
    dict3 = df.to_dict('list') # dictionary 로 변환하는 방법 , () 안의 argument 는 value 값 표기할 형식 
    print(list3, dict3, sep='\n')

     

    DataFrame 의 칼럼 수정/삭제 및 Index 개체 

    titanic_df['Age_0']=0   # 생성 
    titanic_df['Age*2']=titanic_df['Age']*2
    titanic_df['Age*2']=titanic_df['Age*2']*2 # 수정
    titanic_dropdf = titanic_df.drop('Age_0',axis=1, inplace=True) # 컬럼삭제: axis=1
    titanic_dropdf = titanic_df.drop(1,axis=0) # 행삭제: axis=0
    titanic_df.head() # inplace 를 True로 하면 자기자신도 drop 함.. 그래서 Age_0 컬럼은 없고, index 1 은 살아있음
    
    titanic_dropdf = titanic_df.drop(['Age','Age*2'], axis=1) # 여러 컬럼 삭제 
    titanic_dropdf = titanic_df.drop([0,1,2], axis=0) # 여러 행 삭제

     

    DataFrame 의 데이터 셀렉션/인덱싱 및 필터링 (loc,iloc)

    • Numpy 의 경우 [] 안에 슬라이싱, 인덱싱 등으로 데이터 셀렉션을 하지만, DataFrame 의 경우 [] 안에 컬럼명, 불린 인덱스로만 사용하는 것이 좋음 
    titanic_df[titanic_df['Pclass'] == 3].head(3)  #불린 인덱싱 활용예시
    titanic_df[titanic_df['Age']>60][['Name','Sex']].head(3)
    titanic_df[(titanic_df['Age']>60)&(titanic_df['Pclass']==1)&~(titanic_df['Survived']==1)].head(3)
    • 혹은 loc (명칭기반), iloc(인덱스기반) 함수를 통해 데이터 셀렉션 수행
    data = { 'Name':['song','kim','park'],
             'Year':[2001,2002,2003],
             'Gender':['M','M','F'] }
        
    data_df = pd.DataFrame(data, index=['one','two','three'])
    print(data_df)
    print(data_df.iloc[1,2]) # 'M' 반환
    print(data_df.iloc[0:2,[1,2]]) #iloc 안에 슬라이싱이나 리스트 사용가능
    
    # 맨 마지막 컬럼 가져오기 (=타깃 값), 맨마지막 컬럼 외 전부 가져오기 (=피처값) 
    print(data_df.iloc[:,-1], data_df.iloc[:,:-1], sep='\n') #자주 쓰임
    
    print(data_df.loc['one':'three','Gender'])

     

    정렬, Aggregation, Groupby 활용방법

    # 컬럼기준 정렬방식
    titanic_df.sort_values(by=['Pclass','Name'],ascending=False).head(3)
    
    # Aggregation : min,max,sum,count 등등.. 
    titanic_df[['Parch','Age']].sum()  # Series 형식으로 각 칼럼의 합 반환
    
    # agg() 함수의 활용 : 컬럼마다 다른 함수를 적용하는 방법 
    agg_format = {'Age':'max', 'Pclass':'mean','Parch':'sum'}
    titanic_df.agg(agg_format) # Series 형식으로 각 컬럼에 지정한 함수로 계산한값 반환
    titanic_df.groupby('Pclass').agg(agg_format) #위에 값을 Pclass 의 value값 기준으로 계산해서 DataFrame으로 반환
    
    # Groupby
    tt = titanic_df.groupby('Pclass')
    tt[['Survived','Name']].count()
    
    # agg() 함수의 활용 
    #특정 컬럼으로 그루핑한뒤, 특정 컬럼에 대해 여러가지 agg 사용가능
    titanic_df.groupby('Sex')['PassengerId'].agg((max,min)) # Sex에 따라 PassengerID 의 min,max 구해줌

     

    결손 데이터 처리 (NULL = 넘파이에서는 NaN) 

    # NaN 갯수 구하기 
    titanic_df.isna().sum() # 각 컬럼별 null 개수를 Seires 형태로 반환 
    
    # NaN 을 평균값으로 치환하기 
    titanic_df['Age']=titanic_df['Age'].fillna(titanic_df['Age'].mean())

     

    Pandas(DataFrame) 에서 apply lambda 활용법

    lambda_square = lambda x : x**2
    print(lambda_square(3))
    # lambda 에 여러개 인풋 넣는방법
    
    a = (1,2,3)
    multi5 = map(lambda x : x*5, a)
    list(multi5)
    
    # dataframe 에서 lamba 활용한 컬럼 생성 : apply()
    titanic_df['Name_len']=titanic_df['Name'].apply(lambda x:len(x))
    titanic_df[['Name_len','Name']].head(3)
    
    # if-else 조건절 활용한 labmda 
    titanic_df['Age_Cate'] = titanic_df['Age'].apply(lambda x: 'Child' if x <=25 else ('Adult' if x<=35 else 'Elderly'))
    titanic_df[['Age_Cate','Age']].head(5)
    반응형

    댓글