반응형
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)
반응형
'Study > Python' 카테고리의 다른 글
Numpy 기본 함수 및 연산 (2) | 2023.05.26 |
---|---|
[기초문법] 파일의 읽고 쓰기 (1) | 2023.03.06 |
[기초문법] 모듈(Module)과 패키지(Package) (1) | 2023.03.05 |
[기초문법] 사용자 정의 함수 , lambda 함수 (1) | 2023.02.28 |
[기초문법] Class, Object(Instance), Method 이해 (1) | 2023.02.27 |
댓글