Programing

변수 값에서 팬더 DataFrame을 생성하면 "ValueError : 모든 스칼라 값을 사용하는 경우 인덱스를 전달해야합니다"가 발생합니다.

lottogame 2020. 3. 26. 08:18
반응형

변수 값에서 팬더 DataFrame을 생성하면 "ValueError : 모든 스칼라 값을 사용하는 경우 인덱스를 전달해야합니다"가 발생합니다.


이것은 간단한 질문 일지 모르지만 어떻게 해야하는지 알 수 없습니다. 다음과 같이 두 가지 변수가 있다고 가정 해 봅시다.

a = 2
b = 3

이로부터 DataFrame을 구성하고 싶습니다.

df2 = pd.DataFrame({'A':a,'B':b})

오류가 발생합니다.

ValueError : 모든 스칼라 값을 사용하는 경우 인덱스를 전달해야합니다

나는 또한 이것을 시도했다 :

df2 = (pd.DataFrame({'a':a,'b':b})).reset_index()

동일한 오류 메시지가 나타납니다.


스칼라 값을 전달하는 경우 인덱스를 전달해야한다는 오류 메시지가 표시됩니다. 따라서 열에 스칼라 값을 사용할 수 없습니다 (예 : 목록 사용).

>>> df = pd.DataFrame({'A': [a], 'B': [b]})
>>> df
   A  B
0  2  3

또는 스칼라 값을 사용하고 색인을 전달하십시오.

>>> df = pd.DataFrame({'A': a, 'B': b}, index=[0])
>>> df
   A  B
0  2  3

pd.DataFrame.from_records사전을 이미 가지고있을 때 더 편리한 것을 사용할 수도 있습니다 .

df = pd.DataFrame.from_records([{ 'A':a,'B':b }])

원하는 경우 색인을 다음과 같이 설정할 수도 있습니다.

df = pd.DataFrame.from_records([{ 'A':a,'B':b }], index='A')

먼저 팬더 시리즈를 만들어야합니다. 두 번째 단계는 팬더 시리즈를 팬더 데이터 프레임으로 변환하는 것입니다.

import pandas as pd
data = {'a': 1, 'b': 2}
pd.Series(data).to_frame()

열 이름을 제공 할 수도 있습니다.

pd.Series(data).to_frame('ColumnName')

사전을 목록에 배치하려고 시도 할 수 있습니다.

my_dict = {'A':1,'B':2}

pd.DataFrame([my_dict])

   A  B
0  1  2

Pandas DataFrame 열의 값으로 이터 러블을 제공해야합니다.

df2 = pd.DataFrame({'A':[a],'B':[b]})

아마도 Series는 필요한 모든 기능을 제공 할 것입니다.

pd.Series({'A':a,'B':b})

DataFrame은 Series의 모음으로 생각할 수 있습니다.

  • 여러 시리즈를 하나의 데이터 프레임으로 연결 ( 여기에 설명 된대로 )

  • 기존 데이터 프레임에 Series 변수 추가 ( 예 : 여기 )


시도해 볼 수 있습니다 :

df2 = pd.DataFrame.from_dict({'a':a,'b':b}, orient = 'index')

'orient'인수에 대한 문서에서 : 전달 된 dict의 키가 결과 DataFrame의 열이어야하는 경우 'columns'(기본값)를 전달하십시오. 그렇지 않으면 키가 행이어야하는 경우 'index'를 전달하십시오.


나는 numpy 배열과 같은 문제가 있었고 해결책은 그것들을 평평하게하는 것입니다.

data = {
    'b': array1.flatten(),
    'a': array2.flatten(),
}

df = pd.DataFrame(data)

스칼라 사전을 변환하려면 색인을 포함시켜야합니다.

import pandas as pd

alphabets = {'A': 'a', 'B': 'b'}
index = [0]
alphabets_df = pd.DataFrame(alphabets, index=index)
print(alphabets_df)

목록 사전에는 색인이 필요하지 않지만 동일한 아이디어를 목록 사전으로 확장 할 수 있습니다.

planets = {'planet': ['earth', 'mars', 'jupiter'], 'length_of_day': ['1', '1.03', '0.414']}
index = [0, 1, 2]
planets_df = pd.DataFrame(planets, index=index)
print(planets_df)

물론, 목록 사전의 경우 인덱스없이 데이터 프레임을 작성할 수 있습니다.

planets_df = pd.DataFrame(planets)
print(planets_df)

열 - DataFrame 두 직관적 인 차원 있기 때문입니다 행을.

사전 키를 사용하여 열만 지정하고 있습니다.

1 차원 데이터 만 지정하려면 Series!


직장에서 팬더 마술. 모든 논리가 끝났습니다.

오류 메시지 "ValueError: If using all scalar values, you must pass an index"인덱스를 전달해야한다고 말합니다.

이것은 반드시 인덱스를 전달한다는 것이 팬더가 원하는 일을 하게한다는 것을 의미하지는 않습니다.

인덱스를 전달하면 팬더는 사전 키를 열 이름으로, 값을 인덱스의 각 값에 대해 열에 포함해야하는 값으로 처리합니다.

a = 2
b = 3
df2 = pd.DataFrame({'A':a,'B':b}, index=[1])

    A   B
1   2   3

더 큰 인덱스를 전달 :

df2 = pd.DataFrame({'A':a,'B':b}, index=[1, 2, 3, 4])

    A   B
1   2   3
2   2   3
3   2   3
4   2   3

인덱스는 일반적으로 데이터 프레임이 없으면 데이터 프레임에 의해 자동으로 생성됩니다. 그러나, 팬더의 행 수를 알 수 없습니다 23당신이 원하는. 그러나 당신은 그것에 대해 더 명확 할 수 있습니다

df2 = pd.DataFrame({'A':[a]*4,'B':[b]*4})
df2

    A   B
0   2   3
1   2   3
2   2   3
3   2   3

기본 인덱스는 0을 기준으로합니다.

데이터 프레임을 만들 때 항상 목록 사전을 데이터 프레임 생성자에 전달하는 것이 좋습니다. 다른 개발자에게는 읽기 쉽습니다. 팬더는 많은 경고가 있습니다. 다른 개발자가 코드를 읽기 위해 모든 개발자에게 전문가를 요구하지 마십시오.


이것은 @fAx의 회신에 대한 주석입니다. 입력은 레코드 목록 일 필요는 없습니다. 단일 사전 일 수도 있습니다.

pd.DataFrame.from_records({'a':1,'b':2}, index=[0])
   a  b
0  1  2

다음과 같은 것으로 보입니다.

pd.DataFrame({'a':1,'b':2}, index=[0])
   a  b
0  1  2

사전이 있다면 다음 코드 줄을 사용하여 사전을 팬더 데이터 프레임으로 바꿀 수 있습니다.

pd.DataFrame({"key": d.keys(), "value": d.values()})

사전을 데이터 프레임으로 변환

col_dict_df = pd.Series(col_dict).to_frame('new_col').reset_index()

열에 새 이름을 지정하십시오

col_dict_df.columns = ['col1', 'col2']

목록에 dict을 전달하십시오.

a = 2
b = 3
df2 = pd.DataFrame([{'A':a,'B':b}])

참고 URL : https://stackoverflow.com/questions/17839973/constructing-pandas-dataframe-from-values-in-variables-gives-valueerror-if-usi

반응형