인덱싱은 필요한 칼럼이나 로우를 인덱스로 가져오는 것이다.

 

슬라이싱은 필요한 부분만 남기고 잘라내는 것이다.

 

1) .loc : 명시된 인덱스 참조

import numpy as np
import pandas as pd

family_df = pd.DataFrame({"Gender":gender_series, "Age":age_series, "Job":job_series})
        Gender   Age         Job
Flin      Male   NaN     Student
Hank      Male  30.0         DEA
Mary    Female  25.0      Doctor
Skyler  Female  38.0  Accountant 

# "Hank"라고 명시적으로 인덱스 표기하여 데이터 추출하기
print(family_df.loc["Hank"])

# 결과
Gender    Male
Age         30
Job        DEA
Name: Hank, dtype: object

# 명시적인 인덱스의 범위를 지정하기 & 명시적인 칼럼의 범위 지정하기 
# 필요한 데이터만 추출하기
print(family_df.loc["Hank":"Skyler", :"Age"])

# 결과
        Gender   Age
Hank      Male  30.0
Mary    Female  25.0
Skyler  Female  38.0

 

2) .iloc : 정수 인덱스 참조

import numpy as np
import pandas as pd

family_df = pd.DataFrame({"Gender":gender_series, "Age":age_series, "Job":job_series})
        Gender   Age         Job
Flin      Male   NaN     Student
Hank      Male  30.0         DEA
Mary    Female  25.0      Doctor
Skyler  Female  38.0  Accountant 

# 일반적인 정수 인덱스를 사용하여 데이터 추출하기
print(family_df.iloc[0])

# 결과
Gender       Male
Age           NaN
Job       Student
Name: Flin, dtype: object

# 일반적인 정수 인덱스의 범위를 지정하기 & 칼럼번호도 정수로 범위 지정하기
# 필요한 데이터만 추출하기 

print(family_df.iloc[1:3, 0:2])
# 결과
      Gender   Age
Hank    Male  30.0
Mary  Female  25.0

 

3) .head(N) : 위에서부터 N개 남기고 잘라내기

import numpy as np
import pandas as pd

family_df 
        Gender   Age         Job  Tall  Weight  Number
Flin      Male   NaN     Student   178    70.0     0.0
Hank      Male  30.0         DEA   183     NaN  5490.0
Mary    Female  25.0      Doctor   165     NaN  4125.0
Skyler  Female  38.0  Accountant   170     NaN  6460.0
Walt      Male  50.0     Teacher   180     NaN  9000.0
Zessi     Male  23.0      Dealer   170     NaN  3910.0

# 위에서부터 3개만 잘라내기

print(family_df.head(3))
      Gender   Age      Job  Tall  Weight  Number
Flin    Male   NaN  Student   178    70.0     0.0
Hank    Male  30.0      DEA   183     NaN  5490.0
Mary  Female  25.0   Doctor   165     NaN  4125.0

pandas를 활용해 데이터프레임을 다룰때 엑셀파일이나 CSV 파일을 많이 사용한다.

 

엑셀파일이나 CSV 파일을 불러오고 작업후 저장하는 방법에 대해서 정리해보자.

 

1) 읽기 : .read_csv / .read_excel

2) 저장 : .to_csv / .to_excel 

 

import numpy as np
import pandas as pd

#파일 읽기
my_df = pd.read_csv("파일경로/~.csv")
my_df = pd.read_excel("파일경로/~.xls")

#파일저장하기
my_df.to_csv("파일경로/~.csv")
my_df.to_excel("파일경로/~.xls")
 

 

 

 

 

DataFrame (데이터프레임) 은 여러개의 Series가 모여서 이룬 행*열 데이터이다.

흔히 생각하는 "표" 와 같다.

데이터베이스의 기반이 된다.

 

#Series는 인덱스를 가진 하나의 "컬럼(열)" 이라고 보면 된다.

 

1. DataFrame(데이터프레임) 만들기

 - 이름을 인덱스로 가지는 3개의 시리즈가 있다. (gender/age/job)

 - 이 3개의 시리즈를 이어 붙여서 하나의 family_df 데이터프레임을 만들었다.

 - 시리즈끼리 누락되어있는 인덱스 값은 자동으로 NaN 으로 들어간다.

import numpy as np
import pandas as pd

gender_series = pd.Series(['Female','Female','Male', 'Male'], index = ['Skyler','Mary','Hank','Flin'])
age_series = pd.Series([38,25,30], index = ['Skyler','Mary','Hank'])
job_series = pd.Series(["Accountant","Doctor","DEA","Student"],['Skyler','Mary','Hank','Flin'])

family_df = pd.DataFrame({"Gender":gender_series, "Age":age_series, "Job":job_series})
# 결과 
        Gender   Age         Job
Flin      Male   NaN     Student
Hank      Male  30.0         DEA
Mary    Female  25.0      Doctor
Skyler  Female  38.0  Accountant
 

다음과 같은 데이터프레임이 만들어 졌다.

  Gender Age Job
Flin Male NaN Student
Hank Male 30 DEA
Mary Female 25 Doctor
Skyler Female 38 Accountant

 

 

2. 데이터프레임에 새로운 컬럼 추가하기

 

import numpy as np
import pandas as pd

#2. 특정 시리즈를 데이터프레임에 칼럼으로 추가하기
tall_series = pd.Series([170,183,165,178],
                         index = ['Skyler','Hank','Mary','Flin'])
family_df["Tall"] = tall_series
# 결과
        Gender   Age         Job  Tall
Flin      Male   NaN     Student   178
Hank      Male  30.0         DEA   183
Mary    Female  25.0      Doctor   165
Skyler  Female  38.0  Accountant   170
 
  Gender Age Job Tall
Flin Male NaN Student 178
Hank Male 30 DEA 183
Mary Female 25 Doctor 165
Skyler Female 38 Accountant 170

위와 같이 Tall 시리즈를 이용해서 컬럼을 추가했다.

 

 

3. 데이터프레임에 새로운 열(Row) 추가하기 

3-1) 리스트로 추가하기 : 컬럼의 순서(gender/age/job/tall)에 맞게 리스트요소를 입력해야 한다.

3-2) 딕셔너리로 추가하기 : 순서에 상관없이 key 값과 value값이 서로 호응 하면 된다.

 

import numpy as np
import pandas as pd

#3. 새로운 데이터를 데이터프레임에 행(row)으로 추가하기
#3-1) 리스트로 추가하기
family_df.loc['Walt'] = ['Male',50, 'Teacher', 180]

# 결과
        Gender   Age         Job  Tall
Flin      Male   NaN     Student   178
Hank      Male  30.0         DEA   183
Mary    Female  25.0      Doctor   165
Skyler  Female  38.0  Accountant   170
Walt      Male  50.0     Teacher   180


#3-2) 딕셔너리로 추가하기
family_df.loc['Zessi'] = {'Gender':'Male','Job':'Dealer', 'Tall':170, 'Age':23}

# 결과
        Gender   Age         Job  Tall
Flin      Male   NaN     Student   178
Hank      Male  30.0         DEA   183
Mary    Female  25.0      Doctor   165
Skyler  Female  38.0  Accountant   170
Walt      Male  50.0     Teacher   180
Zessi     Male  23.0      Dealer   170
 

 

 

4. 데이터프레임에 빈 칼럼 추가하기

 - Weight라는 이름의 빈 칼럼을 추가 하였다

 - np.nan 을 사용하였다.

4-1) .loc를 사용하여 행과 열을 지정하여 특정 데이터 하나를 입력할 수있다.

 

import numpy as np
import pandas as pd

#4. 빈 칼럼을 데이터프레임에 추가하기
family_df['Weight']=np.nan
# 결과
        Gender   Age         Job  Tall  Weight
Flin      Male   NaN     Student   178     NaN
Hank      Male  30.0         DEA   183     NaN
Mary    Female  25.0      Doctor   165     NaN
Skyler  Female  38.0  Accountant   170     NaN
Walt      Male  50.0     Teacher   180     NaN
Zessi     Male  23.0      Dealer   170     NaN


#4-1) 빈 칼럼에 특정 데이터 하나 넣기
family_df.loc['Flin','Weight'] = 70
# 
        Gender   Age         Job  Tall  Weight
Flin      Male   NaN     Student   178    70.0
Hank      Male  30.0         DEA   183     NaN
Mary    Female  25.0      Doctor   165     NaN
Skyler  Female  38.0  Accountant   170     NaN
Walt      Male  50.0     Teacher   180     NaN
Zessi     Male  23.0      Dealer   170     NaN
 

 

5. 컬럼끼리의 연산으로 새로운 컬럼 데이터 생성하고 추가하기

 - 인덱스로 컬럼데이터를 불러와서 서로 연산을 할 수 있다.

 - .fillna(0) 으로 NaN 데이터를 0으로 변경하여 연산을 수행 하였다.

 

import numpy as np
import pandas as pd

#5. 인덱스로 불러온 시리즈끼리 연산해서 새로운 칼럼추가하기
family_df['Number'] = family_df['Tall'].fillna(0)*family_df['Age'].fillna(0)

# 결과
        Gender   Age         Job  Tall  Weight  Number
Flin      Male   NaN     Student   178    70.0     0.0
Hank      Male  30.0         DEA   183     NaN  5490.0
Mary    Female  25.0      Doctor   165     NaN  4125.0
Skyler  Female  38.0  Accountant   170     NaN  6460.0
Walt      Male  50.0     Teacher   180     NaN  9000.0
Zessi     Male  23.0      Dealer   170     NaN  3910.0
 

 

6. 특정 컬럼 선택하여 새로운 데이터프레임에 저장하기

 

- 열(Row)을 선택하는 방법은 인덱스처럼 불러오는 것이다.

- 복수의 열이 필요할 때는 인덱스 안에 리스트로 필요한 열을 가져올 수 있다.

- 행(column)을 선택하는 방법은 .loc로 인덱스를 불러오는 것이다.

- 복수의 행이 필요할 때에는 .loc[a:b] 로 범위를 지정하여 불러올 수있다.

 

import numpy as np
import pandas as pd

#6. 데이터프레임에서 특정 행열 선택해서 신규 데이터프레임 만들기

#열선택
body_data = family_df[['Tall', 'Weight']]

# 결과 
        Tall  Weight
Flin     178    70.0
Hank     183     NaN
Mary     165     NaN
Skyler   170     NaN
Walt     180     NaN
Zessi    170     NaN


#행선택
Woman_df = pd.DataFrame(family_df.loc["Mary":"Skyler"])

# 결과
        Gender   Age         Job  Tall  Weight  Number
Mary    Female  25.0      Doctor   165     NaN  4125.0
Skyler  Female  38.0  Accountant   170     NaN  6460.0

 

 

Pandas(판다스) 란?

 

파이썬의 라이브러리이다.

사용 목적은 방대한 행렬, 엑셀자료, CSV자료를 가지고 데이터베이스(DB)작업을 하기 위함이다.

딕셔너리와 유사한 시리즈(Series), 거대한 표인 데이터프레임(DataFrame) 을 가지고 강력한 연산작업을 할 수 있게 해주는 라이브러리이다.

 

 

pandas를 사용하려면 아래의 코드를 가장 먼저 입력해 주어야 한다.

import pandas as pd
 

 

 

1. Series (시리즈) : 특수한 딕셔너리, key 값을 인덱스로 사용할 수 있다.

#Dictionary(딕셔너리) = {'key': 'value', 'key2':'value2' ....}

key 값과 value 값이 있다.

 

이 딕셔너리를 그대로 가져와서 key값을 index로 사용한다고 생각하면 Series(시리즈) 가 된다.

 

 

1-2) Series(시리즈) 정의하기

 - 인덱스를 따로 명시하지 않으면 일반적인 인덱스로 0부터 카운트 된다.

 - 인덱스를 따로 명시하면 그대로 입력된다, 문자열로도 인덱스를 지정 가능하다.

import pandas as pd

#인덱스 미지정
data = pd.Series(['a','b','c','d'])
# 결과
0    a
1    b
2    c
3    d
dtype: object

print(data[1]) # 결과 : b


#인덱스 지정    
data2 = pd.Series(['a','b','c','d'], index = [1,2,3,4])

#결과
1    a
2    b
3    c
4    d
dtype: object

print(data2[1]) # 결과 : a
 

 

1-3) 딕셔너리를 Series(시리즈)로 가져오기

 - 딕셔너리의 Key 값이 Index로 들어간다.

 - index로 명시된 문자열로 불러올 수 도 있고, 일반적인 카운팅 index도 사용 할 수있다

 

import pandas as pd 

my_dict = {'RED':'#FF0000', 'GRN':'#40FF00', 'BLU':'#0404B4', 'PPL': '#8904B1'}

my_Series = pd.Series(my_dict) 
# 결과
RED    #FF0000
GRN    #40FF00
BLU    #0404B4
PPL    #8904B1
dtype: object

print(my_Series[0]) # 결과: #FF0000
print(my_Series['RED']) # 결과 : #FF0000
 

 

 

+ Recent posts