web-dev-qa-db-ja.com

変数内の値からパンダDataFrameを構築すると、 "ValueError:すべてのスカラー値を使用する場合は、インデックスを渡す必要があります"が返されます。

これは簡単な質問かもしれませんが、どうすればよいかわかりません。次の2つの変数があるとしましょう。

a = 2
b = 3

これからDataFrameを構築します。

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

これによりエラーが発生します。

ValueError:すべてのスカラー値を使用する場合は、インデックスを渡す必要があります

私もこれを試しました:

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

これは同じエラーメッセージを与えます。

222

エラーメッセージには、スカラ値を渡す場合はインデックスを渡す必要があると書かれています。そのため、列にスカラー値を使用することはできません。リストを使う:

>>> 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
352
DSM

pd.DataFrame.from_recordsを使うこともできます。これはすでに辞書を持っているときに便利です。

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

必要に応じて、インデックスを設定することもできます。

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

最初にパンダシリーズを作成する必要があります。 2番目のステップは、パンダ系列をパンダデータフレームに変換することです。

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

列名も指定できます。

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

Pandas DataFrame列の値としてイテラブルを指定する必要があります。

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

リストに辞書をラップしてみてください。

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

pd.DataFrame([my_dict])

   A  B
0  1  2
8
NewBie

多分Seriesはあなたが必要とするすべての機能を提供するでしょう:

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

DataFrameはSeriesのコレクションと考えることができるため、次のことが可能です。

  • 複数の系列を1つのデータフレームに連結する( ここ の説明のように)

  • 既存のデータフレームにSeries変数を追加します( ここでの例

6
Rob

ぼんやりした配列についても同じ問題がありました。解決策はそれらを平坦化することです。

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

df = pd.DataFrame(data)
4
MicheleDIncecco

スカラの辞書を変換するつもりなら、インデックスを含める必要があります。

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)
2
k0L1081

これは、DataFrameには2つの直感的なディメンション - 列行 - があるためです。

辞書キーを使用して列を指定するだけです。

1次元データのみを指定したい場合は、Seriesを使用してください。

2
danuker

仕事でパンダマジック。すべての論理は無効です。

エラーメッセージ"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です。

データフレームを作成するときは、常にリストの辞書をデータフレームコンストラクタに渡すことをお勧めします。他の開発者にとっては読みやすいです。 Pandasには多くの注意点があります、あなたのコードを読むために他の開発者がそれらすべてのエキスパートにしないようにしてください。

1
firelynx

これは@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
1
S.V

あなたが試すことができます:

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

'orient'引数に関するドキュメンテーションから:渡された辞書のキーが結果として得られるDataFrameの列であるべきならば、 'columns'(デフォルト)を渡します。それ以外の場合、キーを行にする必要がある場合は、「index」を渡します。

1
Matthew Connell

辞書をデータフレームに変換

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

列に新しい名前を付けます

col_dict_df.columns = ['col1', 'col2']
0
kamran kausar

あなたが辞書を持っているなら、あなたは次のコード行でパンダデータフレームにそれを変えることができます:

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