우선 결론: 데이터프레임에서 특정 row를 추출하기 위해 .loc을 사용할 때, 괄호의 수에 따라 반환되는 값의 데이터타입이 달라진다.
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'] -> 이렇게 접근 해야 한다.