これは簡単な質問かもしれませんが、どうすればよいかわかりません。次の2つの変数があるとしましょう。
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')
最初にパンダシリーズを作成する必要があります。 2番目のステップは、パンダ系列をパンダデータフレームに変換することです。
import pandas as pd
data = {'a': 1, 'b': 2}
pd.Series(data).to_frame()
列名も指定できます。
pd.Series(data).to_frame('ColumnName')
Pandas DataFrame列の値としてイテラブルを指定する必要があります。
df2 = pd.DataFrame({'A':[a],'B':[b]})
リストに辞書をラップしてみてください。
my_dict = {'A':1,'B':2}
pd.DataFrame([my_dict])
A B
0 1 2
ぼんやりした配列についても同じ問題がありました。解決策はそれらを平坦化することです。
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には2つの直感的なディメンション - 列 と 行 - があるためです。
辞書キーを使用して列を指定するだけです。
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です。
データフレームを作成するときは、常にリストの辞書をデータフレームコンストラクタに渡すことをお勧めします。他の開発者にとっては読みやすいです。 Pandasには多くの注意点があります、あなたのコードを読むために他の開発者がそれらすべてのエキスパートにしないようにしてください。
これは@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
あなたが試すことができます:
df2 = pd.DataFrame.from_dict({'a':a,'b':b}, orient = 'index')
'orient'引数に関するドキュメンテーションから:渡された辞書のキーが結果として得られるDataFrameの列であるべきならば、 'columns'(デフォルト)を渡します。それ以外の場合、キーを行にする必要がある場合は、「index」を渡します。
辞書をデータフレームに変換
col_dict_df = pd.Series(col_dict).to_frame('new_col').reset_index()
列に新しい名前を付けます
col_dict_df.columns = ['col1', 'col2']
あなたが辞書を持っているなら、あなたは次のコード行でパンダデータフレームにそれを変えることができます:
pd.DataFrame({"key": d.keys(), "value": d.values()})