먼저 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 |
---|