[TIL]Pandas 데이터 구조와 접근

하나·2022년 2월 20일
0

TIL

목록 보기
6/14
post-thumbnail

1. 데이터 구조

  • DataFrame 다차원의 테이블
  • Series 특정 종류의 데이터를 담고있는 1차원 array 데이터테이블의 column이라고 생각하면 된다.
pd.Series(['코기', '허스키', '푸들'])

0     코기
1    허스키
2     푸들
dtype: object
city_names = pd.Series(['서울', '부산', '대전'])
population = pd.Series([9776000, 3429000, 1531000])

pd.DataFrame({'도시': city_names, '인구':population})

  도시	인구
0	서울	9776000
1	부산	3429000
2	대전	1531000

2. DataFrame 파일 읽기

  • pd.read_csv()

csv파일을 읽어옴

  • DataFrame.describe()

DataFrame에 관한 통계값을 보여줌

  • DataFrame.head()

처음 5개 데이터레코드 미리보기가 가능

3. 데이터 접근

indexing 을 통해 한 column 에 접근하면 series

cities = pd.DataFrame({'도시': city_names, '인구':population})
print(type(cities['도시']))
cities['도시']

<class 'pandas.core.series.Series'>
0    서울
1    부산
2    대전
Name: 도시, dtype: object

series 에서 또 한번 indexing 하면 string

print(type(cities['도시'][1]))
cities['도시'][1]

<class 'str'>
부산

슬라이싱도 가능하다.

print(type(cities[0:2]))
cities[0:2]

<class 'pandas.core.frame.DataFrame'>
	도시	인구
0	서울	9776000
1	부산	3429000

4. 데이터 전처리

데이터를 분석에 용이하게 다듬는 과정 (=data cleansing)

  • 데이터 전처리 시 살펴보는 사항들

결측치

이상치 (outlier)

변수의 수 - 너무 많은 경우 차원 축소 (PCA)

편향된 분포의 변수 - log, sqrt 등 으로 분포 변환

측정 단위(scale)이 차이가 클 경우 - 스케일링

# 결측치 갯수 확인
df.isnull().sum()

포맷 통일

# 날짜가 String인 경우 
df['datetime'] = pd.to_datetime(df['datetime'])
# 날짜 포맷이 다를 경우
pd.Series(pd.to_datetime(['2021/08/01', '2021.08.02', '2021.3.3']))

결측치 처리

# 결측치가 하나라도 있으면 버림
df.dropna()

# 모든 값이 Null일 경우만 버림
df.dropna(how='all')

# 결측치가 하나 이상 있는 데이터만 선택
df[df.isnull().any(axis=1)]

# Null 값을 mean으로 대체
df.fillna(df.mean())

# Null 값을 mode로 대체
df.fillna(df.mode())

샘플수가 충분하지 않을 경우, Pandas의 fillna() 명령어로 Null 값을 채우는 것이 가능하다.

  • 연속형인 경우 Mean(평균)이나 Median(중앙값)
  • 이산형인 경우 Mode(최빈값)나 예측모형 값

텍스트 통일

food_data = StringIO("""
seq,name,price,date
1,초밥,"10",2021-01-01
2,냉면,,2021-01-02
3,스시,"8",2021-01-03
4,짜장면,"7",2021-01-04
5,,"7",2021-01-05
6,자장면,,2021-01-06
7,돈까스,"7",
8,초밥,"8",2021-01-08
9,초밥,,2021-01-09
""")

df = pd.read_csv(food_data, dtype={"seq": pd.Int64Dtype()}, parse_dates=[3])
df

딕셔너리 이용해서 replace

food_dic = {'자장면': '짜장면',
           '스시': '초밥',
           '돈가츠': '돈까스'}

df['name'] = df['name'].replace(food_dic)
df

na 값 최빈값으로 채우기

df['name'] = df['name'].fillna(df['name'].mode()[0])

4. statistics 라이브러리

import statistics

참고 : https://fastcampus.app/courses/205687/clips/428915?organizationProductId=8481

0개의 댓글