import pandas as pd
a = {'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e' : 50}
a
> {'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': 50}
type(a)
> dict
b = pd.Series(a)
b
> a 10
b 20
c 30
d 40
e 50
dtype: int64
type(b)
> pandas.core.series.Series
b.shape
> (5,)
import numpy as np
aa = np.arange(3, 10)
aa
> array([3, 4, 5, 6, 7, 8, 9])
bb = pd.Series(aa)
bb
> 0 3
1 4
2 5
3 6
4 7
5 8
6 9
dtype: int32
type(bb)
> pandas.core.series.Series
bb.shape
> (7,)
a
> {'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': 50}
a.keys()
> dict_keys(['a', 'b', 'c', 'd', 'e'])
a.values()
> dict_values([10, 20, 30, 40, 50])
b
> a 10
b 20
c 30
d 40
e 50
dtype: int64
b.index # 이름을 차지하는 것들이 출력됨, object = 문자열
> Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
b.values
> array([10, 20, 30, 40, 50], dtype=int64)
c = [10, 20, 30, 40, 50]
d = pd.Series(c)
d # 딕셔너리타입이 아니거나 따로 채워주지 않으면, 인덱스 부분은 0부터 시작
> 0 10
1 20
2 30
3 40
4 50
dtype: int64
type(d)
> pandas.core.series.Series
d.shape
> (5,)
d.index
> RangeIndex(start=0, stop=5, step=1)
d.values
> array([10, 20, 30, 40, 50], dtype=int64)
e = ['a','b','c','d','e']
f = [10, 20, 30, 40, 50]
g = pd.Series(f, index = e) # 원하는 인덱스 설정
g
> a 10
b 20
c 30
d 40
e 50
dtype: int64
g['a']
> 10
g[0]
> 10
g['a':'d'] # 위치정보가 아니라면 (마지막번째-1)이 아니라 마지막번째까지 나옴, 인덱스의 이름
> a 10
b 20
c 30
d 40
dtype: int64
g[0:4]
> a 10
b 20
c 30
d 40
dtype: int64
import pandas as pd
# 딕셔너리, 리스트로 만들기
a = {'a' : [1,2,3],'b' : [1,3,5],'c' : [2,4,6],'d' : [3,6,9]}
df1 = pd.DataFrame(a)
df1
type(df1)
> pandas.core.frame.DataFrame
df1.shape
> (3, 4)
df1.info()
> <class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 a 3 non-null int64
1 b 3 non-null int64
2 c 3 non-null int64
3 d 3 non-null int64
dtypes: int64(4)
memory usage: 224.0 bytes
import numpy as np
# numpy로 만들기
b = np.arange(12).reshape(3,4)
b
> array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
df2 = pd.DataFrame(b)
df2 # 컬럼명
type(df2)
> pandas.core.frame.DataFrame
df2.shape
> (3, 4)
df2.info()
> <class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 0 3 non-null int32
1 1 3 non-null int32
2 2 3 non-null int32
3 3 3 non-null int32
dtypes: int32(4)
memory usage: 176.0 bytes
# pandas로 바로 만들기, 컬럼명 지정 가능
df = pd.DataFrame([[1,20,'서울'],[2,25,'대전']],
index = ['짱구','철수'], # 행
columns = ['순서', '나이','지역']) # 열
df
type(df)
> pandas.core.frame.DataFrame
df.shape
> (2, 3)
df.info()
> <class 'pandas.core.frame.DataFrame'>
Index: 2 entries, 짱구 to 철수
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 순서 2 non-null int64
1 나이 2 non-null int64
2 지역 2 non-null object
dtypes: int64(2), object(1)
memory usage: 64.0+ bytes
df.index
> Index(['짱구', '철수'], dtype='object')
df.columns
> Index(['순서', '나이', '지역'], dtype='object')
df.values
> array([[1, 20, '서울'],
[2, 25, '대전']], dtype=object)
df.index = ['진구','이슬이'] # 인덱스명 바꾸기
df
df.columns = ['번호', '연령', '고향']
df
df = df.rename(index={'이슬이':'퉁퉁이'}) # 전체가 아닌 특정 인덱스/컬럼을 바꾸는 것도 가능, 가로 안에 딕셔너리 형태로
df
df = df.rename(columns={'번호':'순서', '연령':'나이'})
df
df
df.loc['비실이'] = [3, 22, '인천'] # 행 추가
df
df.loc['이슬이'] = 0 # 모든 값에 0이 들어감
df
df.loc['도라에몽'] = df.loc['퉁퉁이'] # 퉁퉁이랑 똑같이 만들어라~
df
df['나이대'] = ['20대', '20대', '20대', '0대', '20대' ] # 열 추가
df
df['직업'] = '학생' # 똑같은 값으로 열 채우기
df
df.loc['이슬이','순서'] = 4 # 인덱스명 활용
df
df.iloc[3, 1] = 20 # 세번째 행(진구부터), 첫번째 열, 위치정보 활용
df
df.loc['이슬이',['고향','나이대']] = '부산', '20대'
df
df.iloc[4,[1,3]] = 54, '50대'
df
df = df.drop('퉁퉁이', axis = 0) # 행 삭제
df
df = df.drop(['나이대','직업'], axis = 1) # 열 삭제, 여러 개일 경우는 리스트 형태로 입력
df
df2 = df
df2
df2.loc['이슬이','순서'] = 3
df2
df
df3 = df.copy()
df3
df3.loc['비실이','순서'] = 2
df3
df
jin = df.loc['진구'] # 진구에 대한 정보만 저장
jin
> 순서 1
나이 20
고향 서울
Name: 진구, dtype: object
type(jin)
> pandas.core.series.Series
jin.shape
> (3,)
dora = df.iloc[0]
dora
> 순서 1
나이 20
고향 서울
Name: 진구, dtype: object
type(dora)
> pandas.core.series.Series
dora.shape
> (3,)
df4 = df.loc[['진구','이슬이']] # 2차원 형태로 가져오기
df4
type(df4)
> pandas.core.frame.DataFrame
df5 = df.iloc[[0,3]] # 0번째, 3번째를 가져오겠다~
df5
df6 = df.loc['진구':'이슬이']
df6
df7 = df.iloc[0:3]
df7
df
df8 = df[['고향']] # 대괄호가 2개여야 DataFrame이 유지됨
df8
df9 = df['나이'] # 시리즈 형태로 바뀜
df9
> 진구 20
비실이 22
이슬이 20
도라에몽 54
Name: 나이, dtype: int64
type(df8)
> pandas.core.frame.DataFrame
type(df9)
> pandas.core.series.Series
df10 = df[['나이', '고향']]
df10
df
df11 = df.loc[['진구','도라에몽'],['나이','고향']] # 원하는 정보만 빼내고 싶을 때, 인덱스명, 컬럼명
df11
df12 = df.iloc[[0,3],[1,2]] # 행 인덱스, 열 인덱스
df12
a = {'이름': ['짱구', '철수', '맹구'], '나이': [15, 30, 22], '고향': ['서울', '서울', '부산'] }
a
> {'이름': ['짱구', '철수', '맹구'], '나이': [15, 30, 22], '고향': ['서울', '서울', '부산']}
df = pd.DataFrame(a)
df
df2 = df.set_index(['이름']) # 이름이 인덱스명이 되도록 해주는
df2
df3 = df2.set_index(['고향']) # 원래 있던 인덱스는 사라지고 새로운 인덱스가 겹쳐짐
df3
df2
df3 = df2.reset_index() # 원래대로 돌아감
df3
df3 = df3.set_index(['고향'])
df3
df2 = df2.sort_index(ascending = True) # 인덱스명을 기준으로 오름차순
df2
df2 = df2.sort_index(ascending = False)
df2
df2 = df2.sort_values(by = '나이') # 값에서 나이 컬럼명 기준으로 오름차순 정렬
df2
df2 = df2.sort_values(by = '나이', ascending = False) # 값에서 나이 컬럼명 기준으로 내림차순 정렬
df2
df2 = df2.T # 전치
df2
df2 = df2.T
df2
df2['나이대'] = ['30대','20대','10대']
df2
df2 = df2.reset_index()
df2
b = {'10대': 1, '20대': 2, '30대': 3}
df2['나이대'] = df2['나이대'].map(b) # map을 사용해서 규칙을 사용해 문자를 숫자형태로 바꾸고 싶다~
df2
df2.info()
> <class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 이름 3 non-null object
1 나이 3 non-null object
2 고향 3 non-null object
3 나이대 3 non-null int64
dtypes: int64(1), object(3)
memory usage: 224.0+ bytes