독학/Codeit (Pandas, ML, DL)

Codeit : Pandas

Dori1998 2025. 5. 4. 17:52

먼저 numpy랑 pandas는 세트이니깐 동시에 가져와야 한다.

import numpy as np
import pandas as pd

 

리스트를 만들어서 데이터프레임을 만듭시다.

two_dimensional_list = [ ['dongwook', 50, 86], ['sineul', 89, 31], ['ikjoong', 68, 91]   ]

my_df = pd.DataFrame(two_dimensional_list)
my_df

이렇게 하면 결과는 아래와 같이 나온다.

 

type(my_df)
pandas.core.frame.DataFrame

 

가만히 보면, columns랑 index가 0, 1, 2처럼 되어 있네요..?

아무것도 설정 안 해준 상태에서는 기본값이 나타납니다. columns와 index를 설정해 봅시다.

my_df2 = pd.DataFrame(two_dimensional_list, columns = ['name', 'english_score', 'math_score'], index = ['a', 'b', 'c'])

 

잘 설정 되었는지 확인해 봅시다.

 

 

컬럼값 확인

my_df2.columns
Index(['name', 'english_score', 'math_score'], dtype='object')

 

인덱스 값 확인

my_df2.index
Index(['a', 'b', 'c'], dtype='object')

 

전체적인 데이터 타입을 확인하고 싶다면?

my_df2.dtypes
name             object
english_score     int64
math_score        int64
dtype: object

 


From list of lists, array of arrays, list of series

2차원 리스트나 2차원 numpy array로 DataFrame을 만들 수 있다. 심지어 pandas Series를 담고 있는 리스트로도 DataFrame을 만들 수 있다.

따로 column과 row(index)에 대한 설정이 없다면 그냥 0, 1, 2, 3, ...  순서로 된다.

 

import numpy as np
import pandas as pd

two_dimensional_list = [['dongwook', 50, 86], ['sineui', 89, 31], ['ikjoong', 68, 91], ['yoonsoo', 88, 75]]
two_dimensional_array = np.array(two_dimensional_list)
list_of_series = [
    pd.Series(['dongwook', 50, 86]), 
    pd.Series(['sineui', 89, 31]), 
    pd.Series(['ikjoong', 68, 91]), 
    pd.Series(['yoonsoo', 88, 75])
]

# 아래 셋은 모두 동일합니다
df1 = pd.DataFrame(two_dimensional_list)
df2 = pd.DataFrame(two_dimensional_array)
df3 = pd.DataFrame(list_of_series)

print(df1)

 

결과값은 어떻게 나올까? (df1, df2, df3 모두 같다.)

          0   1   2
0  dongwook  50  86
1    sineui  89  31
2   ikjoong  68  91
3   yoonsoo  88  75

 

파이썬 사전 (Dictionary)로도 DataFrame을 만들 수 있다.

사전의 Key로는 column 이름을 쓰고, 그 columns에 해당하는 리스트, numpy array, 혹은 pandas Series를 사전의 value로 넣어주면 된다.

 

import numpy as np
import pandas as pd

names = ['dongwook', 'sineui', 'ikjoong', 'yoonsoo']
english_scores = [50, 89, 68, 88]
math_scores = [86, 31, 91, 75]

dict1 = {
    'name': names, 
    'english_score': english_scores, 
    'math_score': math_scores
}

dict2 = {
    'name': np.array(names), 
    'english_score': np.array(english_scores), 
    'math_score': np.array(math_scores)
}

dict3 = {
    'name': pd.Series(names), 
    'english_score': pd.Series(english_scores), 
    'math_score': pd.Series(math_scores)
}


# 아래 셋은 모두 동일합니다
df1 = pd.DataFrame(dict1)
df2 = pd.DataFrame(dict2)
df3 = pd.DataFrame(dict3)

print(df1)
       name  english_score  math_score
0  dongwook             50          86
1    sineui             89          31
2   ikjoong             68          91
3   yoonsoo             88          75

 

리스트가 담긴 사전이 아니라, 사전이 담긴 리스트로도 DataFrame을 만들 수 있다.

 

import numpy as np
import pandas as pd

my_list = [
    {'name': 'dongwook', 'english_score': 50, 'math_score': 86},
    {'name': 'sineui', 'english_score': 89, 'math_score': 31},
    {'name': 'ikjoong', 'english_score': 68, 'math_score': 91},
    {'name': 'yoonsoo', 'english_score': 88, 'math_score': 75}
]

df = pd.DataFrame(my_list)
print(df)
   english_score  math_score      name
0             50          86  dongwook
1             89          31    sineui
2             68          91   ikjoong
3             88          75   yoonsoo

 

실습 ①

DataFrame을 만들고 출력해 봐라

columns는 name, birthday, occupation 총 3개가 있다.

import pandas as pd

# 여기에 코드를 작성하세요
names = ["Taylor Swift", "Aaron Sorkin", "Harry Potter", "Ji-Sung Park"]
birthdays = ["December 13, 1989", "June 9, 1961", "July 31, 1980", "February 25, 1981"]
occupations = ["Singer-songwriter", "Screenwriter", "Wizard", "Footballer"]

dict = {"name" : names, "birthday" : birthdays, "occupation" : occupations}

df = pd.DataFrame(dict)
# 테스트 코드
df
	name	birthday	occupation
0	Taylor Swift	December 13, 1989	Singer-songwriter
1	Aaron Sorkin	June 9, 1961	Screenwriter
2	Harry Potter	July 31, 1980	Wizard
3	Ji-Sung Park	February 25, 1981	Footballer

 

Pandas의 dtype 들

pandas에 담을 수 있는 dtype(데이터 타입) 몇 가지를 살펴봅시다.

 

dtype 설명
int74 정수
float64 소수
object 텍스트
bool 불린(참과 거짓)
datatime64 날짜와 시간
category 카테고리

 


데이터 파일 읽기

pd.read_csv에 대해서 알아봅시다. csv 파일은 ,(콤마)로 나눠진 데이터의 파일이라고 생각하시면 편합니다.

해당 csv 파일은 아래의 사진과 같이 이뤄져있습니다.

iphone_df = pd.read_csv("iphone.csv")
iphone_df

 

그런데, 만약 "출시일, 디스플레이, 메모리, 출시버전, Face ID"와 같은 Columns 명이 지정 안 되어있다면 무슨 일이 발생할까요?

columns 명이 지금의 1번 인덱스 값들이 되겠습니다.

 

이런 식으로요!

그러면 우리는 어떻게 해야 할까요?

iphone_df = pd.read_csv("iphone.csv", header = None)
iphone_df

요렇게 해주면 됩니다.

 

만약, 인덱스 명이 0, 1, 2, 3, 4 가 아니라 0번 컬럼의 <name>으로 설정하고 싶다면 어떻게 해야할까요?

iphone_df2 = pd.read_csv("iphone.csv", index_col = 0)

이것처럼 "index_col = " 로 설정하면 됩니다.


DataFrame 인덱싱

이름으로 인덱싱하기 기본 형태 단축 형태
하나의 row 이름 df.loc["row4"]  
row 이름의 리스트 df.loc[["row4", "row5", "row3"]]  
row 이름의 리스트 슬라이싱 df.loc["row2" : "row5"] df [ "row2" : "row5" ]
하나의 colmn 이름 df.loc[ : , "col1"] df [ "col1" ]
column 이름의 리스트 df.loc[ :, ["col4", "col6", "col3"]] df [ ["col4", "col6", "col3"] ]
column 이름의 리스트 슬라이싱 df.loc[ : , "col2" : "col5" ]  

 

위치로 인덱싱하기 기본 형태 단축 형태
하나의 row 위치 df.iloc [8]  
row 위치의 리스트 df.iloc [ [4, 5, 3] ]  
row 위치의 리스트 슬라이싱 df.iloc [ 2 : 5 ] df [2:5]
하나의 column 위치 df.iloc [: , 3]  
column 위치의 리스트 df.iloc [:, [3, 5, 6] ]  
column 위치의 리스트 슬라이싱 df.iloc [:, 3:7 ]  

 

'독학 > Codeit (Pandas, ML, DL)' 카테고리의 다른 글

Codeit : Numpy  (0) 2025.05.03