[Python] pandas DataFrame: ValueError: If using all scalar values, you must pass an index 에러 해결 방법
Python 분석과 프로그래밍/Python 데이터 전처리 2019. 9. 15. 12:18이번 포스팅에서는 Python pandas DataFrame을 만들려고 할 때 "ValueError: If using all scalar values, you must pass an index" 에러 해결 방안 4가지를 소개하겠습니다.
import pandas as pd df = pd.DataFrame({'col_1': 1, 'col_2': 2}) --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-2-73d6f192ba2a> in <module>() 1 df = pd.DataFrame({'col_1': 1, ----> 2 'col_2': 2}) ~/anaconda3/envs/py3.5_tf1.4/lib/python3.5/site-packages/pandas/core/frame.py in __init__(self, data, index, columns, dtype, copy) 273 dtype=dtype, copy=copy) 274 elif isinstance(data, dict): --> 275 mgr = self._init_dict(data, index, columns, dtype=dtype) 276 elif isinstance(data, ma.MaskedArray): 277 import numpy.ma.mrecords as mrecords ~/anaconda3/envs/py3.5_tf1.4/lib/python3.5/site-packages/pandas/core/frame.py in _init_dict(self, data, index, columns, dtype) 409 arrays = [data[k] for k in keys] 410 --> 411 return _arrays_to_mgr(arrays, data_names, index, columns, dtype=dtype) 412 413 def _init_ndarray(self, values, index, columns, dtype=None, copy=False): ~/anaconda3/envs/py3.5_tf1.4/lib/python3.5/site-packages/pandas/core/frame.py in _arrays_to_mgr(arrays, arr_names, index, columns, dtype) 5494 # figure out the index, if necessary 5495 if index is None: -> 5496 index = extract_index(arrays) 5497 else: 5498 index = _ensure_index(index) ~/anaconda3/envs/py3.5_tf1.4/lib/python3.5/site-packages/pandas/core/frame.py in extract_index(data) 5533 5534 if not indexes and not raw_lengths: -> 5535 raise ValueError('If using all scalar values, you must pass' 5536 ' an index') 5537 ValueError: If using all scalar values, you must pass an index |
이 에러를 해결하기 위한 4가지 방법을 차례대로 소개하겠습니다.
(1) 해결방안 1 : 인덱스 값을 설정해줌 (pass an index) |
에러 메시지에 "you must pass an index" 라는 가이드라인대로 인덱스 값을 추가로 입력해주면 됩니다.
# (1) pass an index df = pd.DataFrame({'col_1': 1, 'col_2': 2}, index = [0]) df
|
물론 index 에 원하는 값을 입력해서 설정해줄 수 있습니다. index 에 'row_1' 이라고 해볼까요?
df = pd.DataFrame({'col_1': 1, 'col_2': 2}, index = ['row_1']) df
|
(2) 스칼라 값 대신 리스트 값을 입력 (use a list instead of scalar values) |
입력하는 값(values)에 대괄호 [ ] 를 해주어서 리스트로 만들어준 값을 사전형의 값으로 사용하면 에러가 발생하지 않습니다.
# (2) use a list instead of scalar values df2 = pd.DataFrame({'col_1': [1], 'col_2': [2]}) df2
|
(3) pd.DataFrame.from_records([{'key': value}]) 를 사용해서 DataFrame 만들기 |
이때도 [ ] 로 해서 리스트 값을 입력해주어야 합니다. ( [ ] 빼먹으면 동일 에러 발생함)
# (3) use pd.DataFrame.from_records() with a list df3 = pd.DataFrame.from_records([{'col_1': 1, 'col_2': 2}]) df3
|
(4) pd.DataFrame.from_dict([{'key': value}]) 를 사용하여 DataFrame 만들기 |
(3)과 거의 유사한데요, from_records([]) 대신에 from_dict([]) 를 사용하였으며, 역시 [ ] 로 해서 리스트 값을 입력해주면 됩니다.
# (4) use pd.DataFrame.from_dict([]) with a list df4 = pd.DataFrame.from_dict([{'col_1': 1, 'col_2': 2}]) df4
|
많은 도움이 되었기를 바랍니다.
이번 포스팅이 도움이 되었다면 아래의 '공감~'를 꾹 눌러주세요. :-)
'Python 분석과 프로그래밍 > Python 데이터 전처리' 카테고리의 다른 글
[Python pandas] resample() 메소드로 시계열 데이터를 10분 단위 구간별로 집계/요약 하기 (8) | 2019.12.15 |
---|---|
[Python, R, PostgreSQL] 그룹별로 행을 내리기, 올리기 (Lag, Lead a row by Group) (6) | 2019.12.09 |
[Python] 웹에서 XML 포맷 데이터를 Python으로 읽어와서 DataFrame으로 만들기 (18) | 2019.09.04 |
[Python] 웹으로 부터 JSON 포맷 데이터 읽어와서 pandas DataFrame으로 만들기 (0) | 2019.08.31 |
[Python] Python으로 JSON 데이터 읽고 쓰기 (Read and Write JSON data by Python) (4) | 2019.08.31 |