Pandas 데이터프레임 표
import pandas as pd
- Pandas Series 데이터프레임 생성
pd.Series(data = list) - 리스트 데이터프레임 생성
pd.Series(data = dic) - 사전 데이터프레임 생성
a1 = {4 : 123, 9 : 456, 3:789}
a2 = [1,2,3,4,5]
t1 = pd.Series(data = a1)
t2 = pd.Series(data = a2)
- Pandas 데이터 프레임 생성
pd.DataFrame(data = 데이터, columns = ['열1', '열2'...], index = ['인덱스1', '인덱스2', ....])
test = pd.DataFrame(data = [1,2,3], columns = ['test1'], index = ['a','b','c'])
Pandas 활용
열(df == 데이터프레임)
df['col1', 'col2']
행
df.iloc['행번호'] - 원하는 행 출력
df.loc['인덱스 이름'] - 원하는 인덱스값 출력
조건접근
Case 1 만약 price라는 열이 500이상인 값 출력 하고싶을 때
print(df[df['price']>=500])
다중조건
Case2 Price열이 500이상 1000이하의 값을 출력하고 싶을 때
print(df([df['price'] >= 500]) & (df['price'] <= 1000))
평균값, 중간값, 표준편차
# 평균값
df['price'].mean()
# 중앙값
df['price'].median()
# 표준편차
df['price'].std()
# 최대값, 최소값
df['price'].max()
df['price'].min()
- Pandas 데이터 병합
pd.concat([ df1, df2 ] , 속성들 )
- axis = ( 0, 1 )
1은 열끼리 합치는 것, 0은 행끼리 합치는 것s1 = pd.Series([0,1], index=['a','b']) s2 = pd.Series([2,3,4], index=['c','d','e']) s3 = pd.Series([5,6], index=['f','g']) print(pd.concat([s1, s2], axis = 1)) print(pd.concat([s1, s2], axis = 0))
- join = ( outer, inner )
outer는 '합집합, inner는 '교집합 - ignore_index = ( True, False )
True 시, index 0 ~ (n-1)
print(pd.concat([s1, s2], axis = 0, ignore_index = True)) print(pd.concat([s1, s2], axis = 0, ignore_index = False))
- Pandas 데이터 삭제
df.drop(데이터, 속성)
행
df.drop(df.index[[ 0, 2 ]])
※ Index이름으로도 설정가능 df.drop(['index1', 'index2'])
s2 = pd.Series([2,3,4])
s2.drop(s2.index[[0,2]])
열
df.drop( columns = ['열1', '열2'], inplace = )
- inplace = ( True, False )
inplace True 시, 따로 변수에 저장없이 메모리에 적재되어 원본에 그대로 적용되는 방식
df.drop(columns = ['열1', '열2'], inplace = True)
df = df.drop(columns = ['열1', '열2'], inplace = False)
-- drop 후 index리셋
df.reset_index(drop= (True, Flase) , inplace = )
- drop True시, 사용자에게 인덱스 세팅에 사용한 열을 삭제
a = pd.concat([s1, s2], axis = 0, ignore_index = False)
a1 = a.reset_index(drop=False)
a2 = a.reset_index(drop=True)
print(a1)
print(a2)
-- 결측값(nan) 데이터
Nan 데이터 삭제하기
- axis = (0,1)
axis가 0이면 행 제거, 1이면 열 제거 - how = ( 'any', 'all' )
'any' 일 경우 nan값이 하나만 있어도 (열, 행) 삭제
'all' 일 경우의 모든 데이터가 nan이여야 해당 (열, 행) 삭제 - subset = [ '열1' ]
'열1'의 데이터가 Nan 행만 삭제.
df.dropna(axis = 1, how = 'any', subset = None)
Nan 데이터 값 채우기
df['열1'].fillna(df['열1'].mean())
# 해당 Train 데이터 셋의 label 값을 평균으로 채우고 싶을 때
# label값이 '1인' '열2의' 평균 값을 구한다
mean1 = df[df['label1'] == 1]['열2'].mean()
# Nan값을 위의 mean1값으로 대체한다
df[df['label1'] == 1]['열2'].fillna(mean1)
-- 이상치 데이터 삭제
Case 1 데이터안에 이상치 값을 뽑아 삭제가 필요할 때
np.unique(list(df['열1']))
# 방식1
df[df['열1'] == 'null'].index
# 방식2
idx = []
it = list(df['열1'])
for i in range(len(it)):
# 조건 입력 Ex. null일때
if(it[i] == 'null'):
해당 조건의 인덱스값 리스트에 삽입
idx.append(i)
# 인덱스에 행 삭제후, 인덱스 리셋
df = df.drop(idx)
df = df.reset_index(drop = True)
-- 데이터 분리
Case 1 데이터가 ['Benz Class C', 'Audi R8', 'BMW 520d'] 이런식으로 다를 때 분류가 필요
test = ['Benz Class C', 'Audi R8', 'BMW 520d']
for i in test:
print(i.split(' '))
for i in len(test):
print(test[i].split(' ')[0])
# split된 데이터 변경
test[i] = test[i].split(' ')[0]
- 데이터 조건
2개 조건에서 찾기
Case 1 Car열에서 값이 Audi이고 가격이5만 달러가 넘는 행 출력
df[(df['Car'] == 'Audi') & (df['Price'] >= 50000)]
- 데이터 타입 변환
df.['열1].astype(변환타입)
df['열1'] = df['열1'].astype(float)
Object 타입 -> float타입 변경
df.astype({'열이름 : 'float'}).dtypes
Case 1 float 타입 변경중 에러무시하고 object형의 문자열을 NaN 변환 후, 0으로 변경
s1 = pd.Series(['0','1', 'ab-'], index=['a','b','q'])
s2 = pd.Series([2,3,4], index=['c','d', 'e'])
#coerce는 문자열을 숫자형으로 변환 시 ValueError 를 무시하는 속성
s1 = pd.to_numeric(s1, errors = 'coerce')
# nan값에 원하는 값 채우기
s1 = s1.fillna(0)
- Pandas내 데이터 포함내용 찾기
df[ '열1' ]str.contains()
Case 1 데이터프레임 내의 test1열에서 'Audi를 찾고싶다!
test = pd.DataFrame(['Audi I8', 'Benz C', 'Audi R8', 'BMW 520d', 'BMW320d'], columns = ['Cars'])
# 방식1
# str.contains() 함수 사용
print(test[test['Cars'].str.lower().str.contains('audi')])
# 방식2
idx = []
for i in range(len(test['Cars'])):
if 'audi' in test['Cars'].str.lower()[i]:
idx.append(i)
print(idx)
- Pandas 범주형 데이터 변환
Categorical 자료형 - 정수 기반 범주형 데이터를 표현할 수 있는 특수한 데이터형
pd.categorical()
test = pd.DataFrame(['1F', '2F', '3F', '1F', '4F', '1F', np.nan], columns = ['floor'])
test['floor'] = pd.Categorical(test['floor'])
print(test.info())
print(test)
# 갯수 카운트
print(test['floor'].value_counts().sort_index())
- Pandas Group 활용 데이터 분석
열의 속성을 그룹화하여 그룹핑한 데이터의 총합, 평균 등을 계산
import pandas as pd
a = ['Audi','Audi','Audi','Audi','Benz','Benz','BMW','BMW','BMW']
b = [100,200,100,100, 200,200,300,300,300]
test = pd.DataFrame(a , columns = ['Cars'])
test2 = pd.DataFrame(b , columns = ['price'])
# 데이터 합치기
a = pd.concat([test,test2], axis = 1)
Case 1. 차량 브랜드를 그룹화 하여 가격의 합을 구하고 싶을 때
b = a.groupby('Cars')
b['price'].sum()
- Pandas 정규표현식 활용
str.extract활용
import pandas as pd
a = ['90cc','100cc','120cc','over190']
test = pd.DataFrame(a, columns=['cc'])
test['new'] = test['cc'].str.extract('(\d+|\D+)')
print(test)
'(\d+|\D+)' : 문자열에서 앞에 숫자면 숫자만 출력 Or 앞이 문자면 문자만 출력하게 만듬.
str.contains()활용
import pandas as pd
a = ['90cc','100cc','120cc','over190']
test = pd.DataFrame(a, columns=['cc'])
print(test['cc'].str.contains('(cc)'))
CC가 포함된 행 True로 반환
'파이썬 > 데이터 전처리' 카테고리의 다른 글
정규 표현식 파이썬 예제를 통한 데이터 전처리 실제 활용- [데이터 전처리] (0) | 2021.07.12 |
---|---|
Pandas를 이용한 데이터 전처리 및 분석 EDA(판매 데이터 활용) - [데이터 전처리] (0) | 2021.07.01 |
Boxplot 상자도표를 통한 이상치 탐지 - [데이터 전처리] (0) | 2021.06.26 |