DataFrame?
2차원(column과 row) 테이블 데이터 구조를 가진 자료형
DataFrame 생성 방법
① 딕셔너리를 활용하여 생성
② 리스트를 활용하여 생성
③ 파일을 읽어서 생성
① 딕셔너리를 활용하여 생성
a1 = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6], 'c': [7, 8, 9]})
② 리스트를 활용하여 생성
a2 = pd.DataFrame([[1,2,3], [4,5,6], [7,8,9]], ["a","b","c"])
a2
왜 위와 같은 형태로 생성되는지를 확인하기 위해서는 shift + tab 을 활용하여 각 파라미터가 어떤 것을 의미하는지 알아볼 수 있다.
참고로 함수에 커서를 가져다 두고 shift + tab 을 누르면 해당 함수의 parameter를 볼 수 있음
③ 파일을 읽어서 DataFrame 생성
문법: DataFrame명 = pd.read_csv(파라미터)
• read_csv 함수의 파라미터
- filepath or buffer: 파일경로/파일이름.csv를 입력하여 파일을 불러옴
- sep or delimiter: 구분자값
- encoding: 인코딩
- usecols: 실제로 dataframe에 로딩할 columns만 설정
DataFrame의 head, tail
특정 변수에 제대로 데이터가 들어갔는지 확인하기 위해 사용
문법: DataFrame.head(n = 10) (default값은 5)
DataFrame 기본함수
함수 | 설명 | 예시 |
shape | row와 column의 개수를 튜플로 반환함 | cust.shape |
columns | 컬럼명을 확인 | cust.columns |
info | 데이터 타입, 각 아이템의 개수 등을 출력함 | cust.info() |
describe | 데이터 요약 통계량을 나타냄 | cust.describe() |
dtype | 데이터 형태의 종류(Data Type) | cust.dtypes |
Data 조회
1) column 선택하기
기본적으로 []는 column을 추출
컬럼 인덱스일 경우 인덱스의 리스트 사용 가능
>> 리스트를 전달할 경우 결과는 DataFrame
>> 하나의 컬럼명을 전달할 경우 결과는 Series
>> 하나의 컬럼 선택하기: Series 형태로 가지고 올 수도, DataFrame 형태로 가지고 올 수 있음
cust.cust_class
cust['cust_class']
cust[['cust_class']]
>> 복수의 컬럼 선택하기
cust[['cust_class', 'age', 'bill_amt']]
2) DataFrame slicing
> 특정 행 범위를 가지고 오고 싶다면 [] 사용
> DataFrame의 경우 기본적으로 [] 연산자가 column 선택에 사용되지만 slicing은 row 레벨로 지원
# 7,8,9행을 가지고 옴 (인덱스 기준)
cust[7:10]
데이터를 가져오는 두가지 방법
loc: DataFrame에 존재하는 인덱스를 그대로 사용 (인덱스 기준으로 행 데이터 읽기)
iloc: DataFrame에 존재하는 인덱스 상관없이 0 based index로 사용 (행 번호 기준으로 행 데이터 읽기)
#loc
cust.loc[[289]]
cust.loc[[102, 202, 302]]
#iloc
cust.iloc[[2, 102, 202]]
> row, column 동시에 선택하기
# 100, 200, 300 대상으로 cust_class, sex_type, age, bill_amt, arpu_amt col 가지고 오기(loc사용)
cust.loc[[100, 200, 300], ['cust_class', 'sex_type', 'age', 'bill_amt', 'arpu_amt']] # row, col
# 같은 형태로 iloc사용하기 (index를 level로 가지고 오기)
# 100, 200, 300 대상으로 cust_class, sex_type, age, bill_amt, arpu_amt col 가지고 오기(iloc사용)
cust.iloc[[0, 100, 200], [3, 4, 5, 9, 10]]
컬럼 조건문으로 행 추출하기
> 해당 조건에 맞는 row만 선택
> 조건을 명시한 형태로 indexing 하여 가지고 옴
eg. 남자이면서 3개월 평균 청구 금액이 50000 이상이면서 100000 미만인 사람만 가지고 오기
#조건을 전부다 [ ]안에 넣어 주면 됨
extract = cust[(cust['sex_type']=='M') & (cust['avg_bill_amt']>=50000) & (cust['avg_bill_amt']< 100000)]
extract.head()
# 조건문이 너무 길어지거나 복잡해지면...아래와 같은 방식으로 해도 무방함
# 남자이면서
sex = cust['sex_type']=='M'
# 3개월 평균 청구 금액이 50000 이상이면서 100000 미만
bill = (cust['avg_bill_amt']>=50000) & (cust['avg_bill_amt']< 100000)
cust[sex & bill].head()
1) 새 column 추가하기 예시
# r3m_avg_bill_amt 두배로 새로운 col만들기
cust['r3m_avg_bill_amt2'] = cust['r3m_avg_bill_amt'] * 2
cust.head()
# 기존에 col을 연산하여 새로운 데이터 생성
cust['r3m_avg_bill_amt3'] = cust['r3m_avg_bill_amt2'] + cust['r3m_avg_bill_amt']
cust.head()
> insert() 함수 사용
# 새로은 col들은 항상맨뒤에 존재 원하는 위치에 col을 추가하고자 하는 경우
# 위치를 조절 하고 싶다면(insert함수 사용)
cust.insert(10, 'r3m_avg_bill_amt10', cust['r3m_avg_bill_amt'] *10) # 0부터 시작하여 10번째 col에 insert
cust.head()
2) column 삭제하기
axis라는 parameter는 삭제를 가로(행) 기준으로 할 것인지, 세로(열) 기준으로 할 것인지 명시하는 drop() 함수의 parameter임
# axis : dataframe은 차원이 존재 함으로 항상 0과 1이 존재
# (0은 행레벨, 1을 열 레벨)
cust.drop('r3m_avg_bill_amt10', axis=1)
단, 위와 같이 작성하면 원본 데이터는 안 지워진 상태이다. 단순히 결과값을 사전에 보는 정도라고 이해하면 된다.
따라서 저장하기 위해서는 아래의 두가지 방법을 사용할 수 있다.
# 원본 데이터를 지우고자 한다면...
# 방법1 : 데이터를 지우고 다른 데이터 프레임에 저장
cust1 = cust.drop('r3m_avg_bill_amt10', axis=1)
cust1.head()
# 원본 자체를 지우고자 한다면...
# 방법 2 : inplace 파라미터를 할용 True인 경우 원본데이터에 수행
cust.drop('r3m_avg_bill_amt10', axis=1, inplace=True)
'[Python] 연습' 카테고리의 다른 글
[Python] SPICE를 사용한 Voice Pitch 감지 (0) | 2022.08.21 |
---|---|
[Python] 목소리 음 높이 확인하기(Voice Pitch Tracker) (0) | 2022.08.16 |
[AIFB] DataFrame 변형하기 (0) | 2022.08.13 |
[AIFB] Python Basic (0) | 2022.08.12 |
텐서플로로 간단한 머신러닝 실습하기 (0) | 2022.07.11 |