변수 값에서 팬더 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의 모음으로 생각할 수 있습니다.
시도해 볼 수 있습니다 :
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
인덱스는 일반적으로 데이터 프레임이 없으면 데이터 프레임에 의해 자동으로 생성됩니다. 그러나, 팬더의 행 수를 알 수 없습니다 2
와 3
당신이 원하는. 그러나 당신은 그것에 대해 더 명확 할 수 있습니다
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}])
'Programing' 카테고리의 다른 글
여러 파일에서 문자열을 검색하고 Powershell에서 파일 이름을 반환하는 방법은 무엇입니까? (0) | 2020.03.26 |
---|---|
모바일 레이아웃에서 Bootstrap 3 열 순서를 어떻게 변경합니까? (0) | 2020.03.26 |
CSS를 포함하는 가장 좋은 방법은? (0) | 2020.03.26 |
JavaScript에서 배열을 함수 매개 변수로 전달 (0) | 2020.03.26 |
Express를 사용하여 NodeJS 서버에서 파일 다운로드 (0) | 2020.03.26 |