파이썬 (Python)/Pandas (DataFrame)

파이썬 판다스 :: 데이터프레임 DataFrame 정의 (리스트로 감싸기)

옐루비(YellowBee) 2023. 5. 16. 15:35

판다스가 제공하는 DataFrame 구조는 엑셀과 비슷하다고 볼 수 있습니다.

추가적으로 행과 열의 이름을 지정할 수 있습니다.

따로 행의 이름을 지정하지 않으면 index 가 저절로 생성됩니다. (0 부터)

>>>import pandas as pd #230516
>>>data=pd.DataFrame({'이름':['카리나','윈터','닝닝','지젤'], 
                   '성별':['여','여','여','여'], 
                   '나이':['22','24','22','23']})
>>>print(data)

이름 성별  나이
0  카리나  여  22
1   윈터  여  24
2   닝닝  여  22
3   지젤  여  23

pd.DataFrame() 안의 데이터 자료형은 '딕셔너리' 입니다.

딕셔너리는 Key:Value 쌍을 원소로 하는 자료구조로 

 Dic = {'Key1':'Value1','Key2':'Value2','Key3':'Value3'}

Key 값에는 숫자나 문자형(다른 자료형 불가) , Value값에는 어떤 자료형이건 대입 가능합니다.


딕셔너리를 먼저 정의한 후 DataFrame에 대입해도 무방합니다.

>>>dic = {'이름':['카리나','윈터','닝닝','지젤'],
       '성별':['여','여','여','여'], 
       '나이':['22','24','22','23']}
       
>>>data = pd.DataFrame(dic)
>>>data
	이름	성별	나이
0	카리나	여	22
1	윈터	여	24
2	닝닝	여	22
3	지젤	여	23

+ colab 으로 작업 중인데 print(data) 가 아닌 data로 출력하면 표 형태로 나옵니다.


리스트 형태가 아닌 딕셔너리를 DataFrame 형식에 대입이 가능할까?

>>>my_dict = {'name': 'John', 'age': 25, 'city': 'New York'} 
>>>my_dict
{'name': 'John', 'age': 25, 'city': 'New York'}

>>>frame=pd.DataFrame(my_dict)
ValueError                                Traceback (most recent call last)
<ipython-input-14-7a0ca70ae385> in <cell line: 1>()
----> 1 frame=pd.DataFrame(my_dict)

ValueError가 발생합니다.

주어진 딕셔너리가 모든 값이 스칼라 값인 경우,

pd.DataFrame() 함수를 사용하여 바로 DataFrame을 생성하는 것은 지원되지 않습니다.

스칼라 값은 단일 값이므로, 열(column)이나 행(row)의 구조가 없어서 DataFrame으로 변환할 수 없습니다.

따라서, 스칼라 값을 포함하는 딕셔너리를 DataFrame으로 변환하기 위해서는 추가적인 처리가 필요합니다.

예를 들어, 주어진 딕셔너리의 값들을 리스트나 배열로 감싸주어야 합니다. 

이렇게 하면 각 값들이 열(column)이나 행(row)의 구조를 가지게 되어 DataFrame으로 변환할 수 있습니다.

딕셔너리를 리스트로 감싸주어 DataFrame으로 변환해보기

>>>import pandas as pd

>>>my_dict = {'name': ['John'], 'age': [25], 'city': ['New York']}
>>>frame = pd.DataFrame(my_dict)

각 값들을 리스트로 감싸주었습니다.

frame은 1행 x 3열의 DataFrame이 되며, 단일 값을 가지는 스칼라 값들이 올바르게 변환되었습니다.

따라서, 주어진 딕셔너리가 스칼라 값을 포함하고 있다면, 

각 값을 리스트나 배열로 감싸주어야 DataFrame으로 변환할 수 있습니다. 

이렇게 수정한 코드를 실행하면 정상적으로 DataFrame을 생성할 수 있습니다.