import pandas as pd
data_url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data'
df_data = pd.read_csv(data_url, sep='\s+', header = None) # sep 은 정규식
df_data.head()
list_data = [1, 2, 3, 4, 5]
example_obj = pd.Series(data = list_data)
example_obj
'''
0 1
1 2
2 3
3 4
4 5
dtype: int64
'''
dict_data = {'a' : 1, 'b' : 2}
example_obj = pd.Series(dict_data)
example_obj.name = "number"
example_obj.index.name = "alphabet"
example_obj
'''
alphabet
a 1
b 2
Name: number, dtype: int64
'''
example_obj.index
# Index(['a', 'b'], dtype='object', name='alphabet')
# index 값 기준으로 series 생성
dict_data = {'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5}
indexes = ['a', 'b', 'c', 'd', 'e', 'f']
series_obj = pd.Series(dict_data, index=indexes)
series_obj
'''
a 1.0
b 2.0
c 3.0
d 4.0
e 5.0
f NaN
dtype: float64
'''
시리즈 데이터들의 모임, 테이블이기도 함, 기본 2차원, 주로 csv 나 엑셀 형태로 불러냄
컬럼마다 데이터 타입이 다를 수 있음
인덱스와 컬럼으로 접근 가능
df["first_name"] 와 df.first_name 은 같음. fist_name 컬럼 불러옴
인덱싱
loc - index 이름
iloc - index 번호
# 값 중 3 이 나올때까지 추출
df.loc[:3]
'''
first_name last_name age city
0 Jason Miller 42 San Francisco
1 Molly Jacobson 52 Baltimore
2 Tina Ali 36 Miami
3 Jake Milner 24 Douglas
'''
# 인덱스 3 전까지 추출
df.iloc[:3]
'''
first_name last_name age city
0 Jason Miller 42 San Francisco
1 Molly Jacobson 52 Baltimore
2 Tina Ali 36 Miami
'''
자세한 코드는 DataFrame 에 있습니다.
boolean index 로 값 설정 가능
df.debt = df.age > 40
df
'''
first_name last_name age city debt
0 Jason Miller 42 San Francisco True
1 Molly Jacobson 52 Baltimore True
2 Tina Ali 36 Miami False
3 Jake Milner 24 Douglas False
4 Amy Cooze 73 Boston True
'''
엑셀 파일 다룰 때 !conda install --y xlrd
로 xlrd 설치
컬럼명으로 뽑기
인덱스로 뽑기
fancy index, boolean index 가능
인덱스값 설정, df.account = df["account"]
데이터 뽑는 방식 (중요)
reset_index() : 인덱스 값 초기화 (0, 1, 2 ...), 원본 안바뀜
boolean index 로 셀렉션 가능
df1.add(df2, fill_value=0) : 두 데이터 프레임 합치는데 (인덱스 + 컬럼 전부) 안 겹치는 공간은 NaN 으로 채움. fill_value 를 설정하면 NaN 대신 그 값으로 채움
→ df1 + df2 와 기본적으로 동일
df = DataFrame(np.arange(16).reshape(4, 4), columns=list("abcd"))
df
'''
a b c d
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
3 12 13 14 15
'''
s = Series(np.arange(10, 14), index=list("abcd"))
s
'''
a 10
b 11
c 12
d 13
dtype: int64
'''
df + s
'''
a b c d
0 10 12 14 16
1 14 16 18 20
2 18 20 22 24
3 22 24 26 28
'''
s2 = Series(np.arange(10, 14))
s2
'''
0 10
1 11
2 12
3 13
dtype: int64
'''
# 시리즈의 인덱스가 없어서 옆으로 붙임, NaN으로 전부 채워짐
df + s2 # == df.add(s2, axis=1)
'''
a b c d 0 1 2 3
0 NaN NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN NaN NaN NaN
'''
df.add(s2, axis=0)
'''
a b c d
0 10 11 12 13
1 15 16 17 18
2 20 21 22 23
3 25 26 27 28
'''
s1 = Series(np.arange(10))
s1.map(lambda x: x**2).head()
'''
0 0
1 1
2 4
3 9
4 16
dtype: int64
'''
# dict 타입 적용
z = {1: 'a', 2: 'b', 3 : 'c'}
s1.map(z).head()
'''
0 NaN
1 a
2 b
3 c
4 NaN
dtype: object
'''
# DF 타입 적용
s2 = Series(np.arange(10, 20))
s2.map(s2).head()
'''
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
dtype: float64
'''
df["sex_code"] = df.sex.map({"male" : 0, "female" : 1})
df.head()
earn height sex race ed age sex_code
0 79571.299011 73.89 male white 16 49 0
1 96396.988643 66.23 female white 16 62 1
2 48710.666947 63.77 female white 16 33 1
3 80478.096153 63.22 female other 16 95 1
4 82089.345498 63.08 female white 17 43 1
df.sex.replace({"male": 0, "female": 1}, inplace=True)
df.head()
earn height sex race ed age sex_code
0 79571.299011 73.89 0 white 16 49 0
1 96396.988643 66.23 1 white 16 62 1
2 48710.666947 63.77 1 white 16 33 1
3 80478.096153 63.22 1 other 16 95 1
4 82089.345498 63.08 1 white 17 43 1
# 셋 다 똑같음
# 함수 정의 후 어플라이
f = lambda x: np.mean(x)
df_info.apply(f)
# 내장 함수 어플라이
df_info.apply(np.mean)
# 내장 함수 사용
df_info.mean()
'''
earn 32446.292622
height 66.592640
age 45.328499
dtype: float64
'''
BoostCamp AI Tech