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
댓글
댓글 쓰기