Python/NumPy | Pandas

[Pandas] 데이터프레임 생성 시 ValueError: All arrays must be of the same length

비번변경 2024. 10. 7. 11:42

현상

다음과 같은 JSON 형식의 데이터가 있다고 하자.

{
    'Singer' : 'James',
    'Titles': ['a', 'b', 'c'],
    'Albums' : [1, 2]
}

이 데이터를 1행 3열의 데이터프레임으로 생성하려고 한다. 하지만 기본적으로 리스트의 원소 수만큼의 행을 가진 데이터프레임을 만들게 끔 되어 있기 때문에 생성을 시도하면 다음과 같은 에러가 발생한다.

ValueError: All arrays must be of the same length

꼼수를 부려 데이터프레임을 만들어 보자.

 

 

방법

데이터프레임을 생성할 때 DataFrame 생성자 말고 from_records, from_dicts과 같은 함수를 사용할 수도 있다. 이중 from_dicts 함수는 orient라는 매개변수를 사용하여 변환 방식을 지정할 수 있는데, 그 값은 다음과 같다.

- index : 키 값을 행으로 지정한다.

- columns : 키 값을 열로 지정한다. 기본값에 해당한다.

- tight : 'index', 'columns', 'data', 'index_names', 'column_names' 키를 가진 딕셔너리를 변환한다.

 

이 부분을 이용해 키 값을 행으로 지정하여 데이터프레임을 생성하고 전치를 하면 의도했던 대로 데이터프레임을 만들 수 있다.

 

 

예시

위에서 예시로 한 데이터를 사용해 데이터프레임을 만들어보자.

data = {
    'Singer' : 'James',
    'Titles': ['a', 'b', 'c'],
    'Albums' : [1, 2]
}

 

먼저 키 값을 행으로 지정하여 데이터프레임을 생성한다.

pd.DataFrame.from_dict(data, orient='index')

이 데이터프레임은 의도했던 데이터프레임에서 행과 열이 서로 바뀌어 있는 형태이다. 전치를 하자.

pd.DataFrame.from_dict(data, orient='index').T

 

 

참고 문서

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.from_dict.html#pandas.DataFrame.from_dict

https://stackoverflow.com/questions/40442014/pandas-valueerror-arrays-must-be-all-same-length