pandas 대괄호 수에 따른 인덱싱 차이 - .loc DataFrame Series

HBJ·2023년 1월 26일
0

우선 결론: 데이터프레임에서 특정 row를 추출하기 위해 .loc을 사용할 때, 괄호의 수에 따라 반환되는 값의 데이터타입이 달라진다.

df_test라는 특정 데이터 프레임의 형태는 아래와 같이, chart_data와 feature_data를 칼럼으로 가지며, 각 칼럼의 값은 해당 티커에 관한 chart_data의 데이터프레임 또는 feature_data 데이터프레임이다.

이때, df_test의 ticker 중 "004540"을 .loc['004540'] 및 .loc[['004540']]으로 서로 다르게 선택해보자.

        print("===df_test.loc['004540']으로 데이터를 선택한 경우===")
        깨끗한나라 = df_test.loc['004540']
        print(깨끗한나라)
        print("선택된 데이터의 타입: ", type(깨끗한나라))
        
        print("===df_test.loc[['004540']]으로 데이터를 선택한 경우===")
        깨끗한나라 = df_test.loc[['004540']]
        print(깨끗한나라)
        print("선택된 데이터의 타입: ", type(깨끗한나라))

결과:

결과를 보면,
1) 대괄호가 하나인 경우에는 해당 인덱스를 갖는 row의 데이터만 추출되어 Series타입으로 반환되고,
2) 대괄호가 두개인 경우에는 해당 인덱스를 갖는 row가 필터링되어 DataFrame타입이 반환된다.

이러한 차이로 인해 데이터프레임을 값으로 갖는 데이터프레임에서 내부 값에 접근하기 위한 방법이 달라진다.

.loc[]으로 인덱싱한 경우 (즉, Series타입이 반환된 경우)

df_test.loc['004540'] # 타입: <class 'pandas.core.series.Series'>
df_test.loc['004540']['chart_data'] # 타입: <class 'pandas.core.frame.DataFrame'>
df_test.loc['004540']['chart_data']['date'] --> 이렇게 특정 칼럼에 접근 가능

.loc[[]]으로 인덱싱한 경우 (즉, DataFrame타입이 반환된 경우)

df_test.loc[['004540']] # 타입: <class 'pandas.core.frame.DataFrame'>
df_test.loc[['004540']]['chart_data'] # 타입: <class 'pandas.core.series.Series'> 
df_test.loc[['004540']]['chart_data']['date'] -> error!
df_test.loc[['004540']]['chart_data'].values[0]['date'] -> 이렇게 접근 해야 한다.

0개의 댓글