반응형
numpy는 1개의 데이터 타입을 갖지만
데이터 프레임은 시리즈의 집합이고 시리즈는 각각 데이터 타입을 갖을 수 있다.
데이터프레임 DataFrame - 시리즈를 모아서 데이터 테이블을 생성 기본적으로 2차원 데이터
판다스를 임포트하고 DataFrame()을 이용해 생성한다.
from pandas import Series, DataFrame
df = DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
from pandas import DataFrame
data = {"name":["kim","lee","oh","jung","roh"],
"age":["21","25","33","17","45"],
"city":["seoul","daejeon","daegu","busan","gwangju"]}
column_list=["name","age","city"]
df = DataFrame(data, columns=column_list)
df
name age city
0 kim 21 seoul
1 lee 25 daejeon
2 oh 33 daegu
3 jung 17 busan
4 roh 45 gwangju
보통 csv파일을 로드하여 사용하며 위와 같은 방식으로는 잘 사용하지 않는다.
일반적으로 대량의 데이터를 사용하기 때문에 직접 쓰지 않고 csv로 저장하였다가 불러와 사용
columns 인자에 키의 순서를 리스트로 넘기면 해당 키값의 순서대로 데이터가 나열되며
데이터에 없는 키가 전달되면 NaN으로 채운다.
column_list=["age","city","name","job"]
df = DataFrame(data, columns=column_list)
df
age city name job
0 21 seoul kim NaN
1 25 daejeon lee NaN
2 33 daegu oh NaN
3 17 busan jung NaN
4 45 gwangju roh NaN
df["column_name"]
column 값으로 시리즈 데이터를 선택할 수 있다.
city라는 하나의 시리즈 데이터를 선택하려면 딕셔너리 같이 column명으로 접근
df["city"]
0 seoul
1 daejeon
2 daegu
3 busan
4 gwangju
Name: city, dtype: object
df.column_name
df.column_name 으로도 시리즈 데이터를 선택할 수 있다.
df.name
0 kim
1 lee
2 oh
3 jung
4 roh
Name: name, dtype: object
하나의 로우row를 선택하려면 df[0]과 같이 생각할 수 있지만 이렇게 쓰면 오류가 발생한다.
df[0]
KeyError: 0
df.loc[index] 를 사용하여 해당 인덱스의 row를 추출
df.loc[0]
age 21
city seoul
name kim
job NaN
Name: 0, dtype: object
만일 인덱스를 지정해줬다면 loc에 인덱스 이름이 들어가야 한다.
인덱스를 지정하지 않았을 경우 자동으로 0부터 숫자로 초기화 되지만
인덱스를 지정했다면 지정한 이름으로 접근해야 한다.
data = {"name":["kim","lee","oh","jung","roh"],
"age":["21","25","33","17","45"],
"city":["seoul","daejeon","daegu","busan","gwangju"]}
column_list=["name","age","city"]
df = DataFrame(data, columns=column_list, index=["a","b","c","d","e"])
df
name age city
a kim 21 seoul
b lee 25 daejeon
c oh 33 daegu
d jung 17 busan
e roh 45 gwangju
df.loc[0]
TypeError: cannot do label indexing on <class 'pandas.core.indexes.base.Index'> with these indexers [0] of <class 'int'>
df.loc["b"]
name lee
age 25
city daejeon
Name: b, dtype: object
df.iloc[시작번호:끝번호+1]인덱스의 이름이 아닌 인덱스의 순서로 접근
df.iloc[2:4]
name age city
c oh 33 daegu
d jung 17 busan
df.loc["b"]는 인덱스가 b인 row 선택
df.iloc[2:4]는 2번째부터 3번째까지 row 선택
column에 데이터 할당
df.column명 = 시리즈 데이터
job_series = Series(["chef","officer","doctor","student","farmer"])
df.job = job_series
df
age city name job
0 21 seoul kim chef
1 25 daejeon lee officer
2 33 daegu oh doctor
3 17 busan jung student
4 45 gwangju roh farmer
df.T transpose 행과 열을 바꿈
df.T
0 1 2 3 4
age 21 25 33 17 45
city seoul daejeon daegu busan gwangju
name kim lee oh jung roh
job chef officer doctor student farmer
df.values 넘파이 배열로 변환
df.values
0 1 2 3 4
age 21 25 33 17 45
city seoul daejeon daegu busan gwangju
name kim lee oh jung roh
job chef officer doctor student farmer
df.to_csv("filename.csv") csv 파일로 저장하기
df.to_csv("filename.csv")
반응형
댓글