현상
다음과 같은 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://stackoverflow.com/questions/40442014/pandas-valueerror-arrays-must-be-all-same-length