본문 바로가기

프로그래밍/Python

pandas ValueError: If using all scalar values, you must pass an index

반응형

pandas 로 간단한 데이터프레임을 만들려고 했다. 코드는 다음과 같다.

import pandas as pd

df = pd.DataFrame({"name":"강수연", "sex":"F"})

너무 간단한 코드이다. 데이터프레임 생성인자로 사전형식으로 데이터를 만들어 넘겼다. 아래와 같은 에러가 발생한다.

Traceback (most recent call last):
  File "<pyshell#14>", line 1, in <module>
    df = pd.DataFrame({"name":"강수연", "sex":"F"})
  File "C:\PROGRAMS\Python3864\lib\site-packages\pandas\core\frame.py", line 614, in __init__
    mgr = dict_to_mgr(data, index, columns, dtype=dtype, copy=copy, typ=manager)
  File "C:\PROGRAMS\Python3864\lib\site-packages\pandas\core\internals\construction.py", line 464, in dict_to_mgr
    return arrays_to_mgr(
  File "C:\PROGRAMS\Python3864\lib\site-packages\pandas\core\internals\construction.py", line 119, in arrays_to_mgr
    index = _extract_index(arrays)
  File "C:\PROGRAMS\Python3864\lib\site-packages\pandas\core\internals\construction.py", line 625, in _extract_index
    raise ValueError("If using all scalar values, you must pass an index")
ValueError: If using all scalar values, you must pass an index

DataFrame 의 생성자에는 단순한 사전을 넘기면 안 된다. 사전을 넘긴다면, 사전의 각 value 가 길이가 같은 리스트 (혹은 시리즈)여야 한다. 이렇게 바꾸어 실행한 결과는 다음과 같다.

>>> df = pd.DataFrame({"name":[ "강수연" ], "sex":[ "F" ]})
>>> df
  name sex
0  강수연   F

이 방법이 아니라면, 저런 단일값의 사전의 리스트를 넘겨서 데이터프레임을 생성할 수도 있다. json 형식으로 데이터가 저장된 걸 읽어왔을 때 이런 형식일 때가 많다.

>>> df = pd.DataFrame([ {"name":"강수연", "sex": "F"}, {"name":"박중훈", "sex": "M" } ])
>>> df
  name sex
0  강수연   F
1  박중훈   M

한 줄짜리 데이터프레임을 만들고 싶다면,

>>> df = pd.DataFrame([ {"name":"강수연", "sex": "F"} ])
>>> df
  name sex
0  강수연   F

에러가 발생했을 때의 코드와 아래 두가지 정상적인 예를 잘 비교해서 차이를 기억하자.

 

--

설명이 이해가 안 된다면 댓글로 질문 달아주세요.

728x90