본문 바로가기
Study/Python

Pandas 기본 활용법

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

 

 

파일 불러오기 (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)
반응형

댓글