DataFrame
내용
DataFrame 생성
Data Frame은 두 개 이상의 Series객체를 결합한 여러개의 행과 열로 구성된 구조입니다. 이 구조의 데이터들은 Series와 같이 정수, 문자, 부동소수, 파이썬 객체 등이 될 수 있으며 각 열 마다 다른 자료 형태들을 복합적으로 사용될 수 있습니다. 이 구조가 가질 수 있는 데이터 형태 및 구조를 구체적으로 나타내면 다음과 같습니다.
- 1차원 배열, 리스트, 사전, 또는 Series
- 2차원 numpy 배열
- Structured or record ndarray(데이터베이스 형식)
- A Series
- Another DataFrame
다음 함수에 의해 DataFrame객체를 생성합니다.
- DataFrame(data, index, columns, dtype);
- index: 행이름
- columns: 열이름
- dtype: 자료형
DataFrame은 행과 열을 가진 2차원입니다. 차원과 모양은 속성 .ndim
과 .shape
로 확인 할 수 있습니다.
d=[[ 0. , 2.5, 5. , 7.5, 10. ], ['book','house','car','smartphone','computer']] d_df=pd.DataFrame(d); d_df
0 | 1 | 2 | 3 | 4 | |
---|---|---|---|---|---|
0 | 0.0 | 2.5 | 5.0 | 7.5 | 10.0 |
1 | book | house | car | smartphone | computer |
print(f"d_df의 차원:{d_df.ndim}, _모양:{d_df.shape}")
d_df의 차원:2, _모양:(2, 5)
위 결과와 같이 DataFrmae은 2차원입니다. 즉, 기본 구조는 행과 열로 이루어지며 함수의 인수 index와 columns를 사용하여 각각의 이름을 지정할 수 있습니다. 별도로 지정하지 않는 경우 위 결과와 같이 행인덱스, 열인덱스로 지정됩니다. 생성된 객체의 행이름이나 열이름은 속성 .index, .columns
를 적용합니다.
d_df.index=["r1", 'r2'] d_df.columns=['c1', 'c2', 'c3','c4','c5'] d_df
c1 | c2 | c3 | c4 | c5 | |
---|---|---|---|---|---|
r1 | 0.0 | 2.5 | 5.0 | 7.5 | 10.0 |
r2 | book | house | car | smartphone | computer |
사전 형식의 객체는 인덱스 역할을 하는 key와 값인 value를 같이 나타내는 구조입니다. 이 구조의 객체는 다음 함수에 의해 dataframe으로 전환할 수 있으며 이 객체는 2차원이므로 key의 방향성을 지정해야 합니다.
- pandas.DataFrame.from_dict(data, orient='columns')
- orient: 데이터의 방향성을 결정
데이터의 키가 열이름이 되기 위해서는 'columns'
행이름이 되기 위해서는 'index'로 지정
지정되지 않은 부분은 인덱스로 자동지정
- orient: 데이터의 방향성을 결정
data = {'col_1': [3, 2, 1, 0], 'col_2': ['a', 'b', 'c', 'd']} data_pd=pd.DataFrame.from_dict(data); data_pd
col_1 | col_2 | |
---|---|---|
0 | 3 | a |
1 | 2 | b |
2 | 1 | c |
3 | 0 | d |
data_pd2=pd.DataFrame.from_dict(data, orient='index'); data_pd2
0 | 1 | 2 | 3 | |
---|---|---|---|---|
col_1 | 3 | 2 | 1 | 0 |
col_2 | a | b | c | d |
두 개이상의 Series를 가진 사전 구조의 데이터를 DataFrame 구조로 전환할 수 있습니다. 다음의 예에서 사전 형식인 d의 키 ‘one’의 값들은 3개, ‘two’의 값들은 4개로 두 Series 값들의 수가 다릅니다. 이 경우 포함되지 않은 경우 NaN이 자동적으로 부여됩니다.
d={'one':pd.Series([1,2,3], index=['a','b','c']), 'two':pd.Series([1,2,3,4], index=['a','b','c','d'])} df=pd.DataFrame(d); df
one | two | |
---|---|---|
a | 1.0 | 1 |
b | 2.0 | 2 |
c | 3.0 | 3 |
d | NaN | 4 |
객체의 호출과 슬라이싱
메서드 .head(n), .tail(n)으로 객체의 처음과 마지막 부분을 호출할 수 있습니다. n은 호출할 행의 수이며 기본값은 5입니다.
df.head(1)
one | two | |
---|---|---|
a | 1.0 | 1 |
df.tail(1)
one | two | |
---|---|---|
d | NaN | 4 |
DataFrame의 슬라이싱은 2차원 array(행렬) 객체와 유사하지만 다음 표와 같이 대괄호 대신 loc[ ], 또는 iloc[ ]를 사용합니다.
함수 | 내용 |
---|---|
df[열이름] df[ [열이름1, 열이름2, ...] ] | 열선택 , 다중의 열을 호출할 경우 호출할 열이름은 하나의 인자가 되어야 하므로 리스트([])로 묶어 표현해야 합니다. |
df.loc[행이름, 열이름] | 라벨(이름)에 의한 행, 열 선택 |
df.iloc[정수] | 위치를 나타내는 정수에 의해 행 선택 |
호출시 범위를 나타내기 위해서는 콜론(":")을 사용합니다. [시작:마지막] → 시작에서 마지막 직전의 정수를 의미 [:] → 모든 원소를 의미 |
DataFrame에서 하나의 요소만 추출할 경우 그 요소의 자료형을 가지지만 두 개 이상의 요소를 호출할 경우 Series 또는 DataFrame 객체가 됩니다. 특히 하나의 열이나 행을 슬라이싱(추출)한다면 추출된 객체는 Series 형태가 됩니다.
다음 객체는 파이썬 패키지 FinanceDataReader의 함수 DataReader(대상코드, 시작날짜, 마지막날짜)
를 적용하여 코스피('KS11')의 일부 자료를 호출한 것입니다. 이 함수의 결과는 pandas.DataFrame입니다.
st=pd.Timestamp(2024,8,1) et=pd.Timestamp(2024, 8,21) df=fdr.DataReader('KS11', st, et) df.head(2)
Open | High | Low | Close | Volume | … | |
---|---|---|---|---|---|---|
Date | … | |||||
2024-08-01 | 2787.27 | 2794.11 | 2772.97 | 2777.68 | 480833975 | … |
2024-08-02 | 2719.39 | 2725.05 | 2666.40 | 2676.19 | 531785136 | -… |
num1=df.iloc[0,0] num1, type(num1)
(2787.27, numpy.float64)
col1=df['Open'] col1
Date 2024-08-01 2787.27 2024-08-02 2719.39 ⋮ 2024-08-21 2687.20 Name: Open, dtype: float64
type(col1)
pandas.core.series.Series
df.iloc[2:5, :4]
Open | High | Low | Close | |
---|---|---|---|---|
Date | ||||
2024-08-05 | 2611.30 | 2611.30 | 2386.96 | 2441.55 |
2024-08-06 | 2533.34 | 2578.77 | 2491.47 | 2522.15 |
2024-08-07 | 2515.27 | 2594.83 | 2510.82 | 2568.41 |
df.loc['2024-08-21', ['Open', 'Close']]
Open 2687.20 Close 2701.13 Name: 2024-08-21 00:00:00, dtype: float64
df.iloc[-1]
Open 2.687200e+03 High 2.704980e+03 Low 2.684610e+03 Close 2.701130e+03 Volume 4.173296e+08 Change 1.700000e-03 UpDown 1.000000e+00 Comp 4.500000e+00 Amount 9.378558e+12 MarCap 2.210561e+15 Name: 2024-08-21 00:00:00, dtype: float64
댓글
댓글 쓰기