it-swarm.dev

بناء الباندا DataFrame من القيم في المتغيرات يعطي "ValueError: إذا كنت تستخدم جميع القيم العددية ، يجب عليك تمرير فهرس"

قد يكون هذا سؤالًا بسيطًا ، لكن لا يمكنني معرفة كيفية القيام بذلك. دعنا نقول أن لدي اثنين من المتغيرات على النحو التالي.

a = 2
b = 3

أريد بناء DataFrame من هذا:

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

هذا يولد خطأ:

ValueError: إذا كنت تستخدم كل القيم العددية ، فيجب عليك تمرير فهرس

جربت هذا أيضًا:

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

هذا يعطي نفس رسالة الخطأ.

222
Nilani Algiriyage

تقول رسالة الخطأ أنه إذا كنت تتجاوز القيم العددية ، فيجب عليك تمرير فهرس. لذلك لا يمكنك إما استخدام القيم العددية للأعمدة - على سبيل المثال استخدم قائمة:

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

تحتاج إلى إنشاء سلسلة الباندا أولاً. والخطوة الثانية هي تحويل سلسلة الباندا إلى قاعدة بيانات الباندا.

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

ربما توفر السلسلة جميع الوظائف التي تحتاجها:

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

يمكن اعتبار DataFrame كمجموعة من السلسلة ومن ثم يمكنك:

  • سلسل سلسلة متعددة في إطار بيانات واحد (كما هو موضح هنا )

  • إضافة متغير 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
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

عادةً ما يتم إنشاء الفهرس تلقائيًا بواسطة قاعدة بيانات عندما لا يتم تقديم أي منها. ومع ذلك ، لا تعرف الباندا عدد صفوف 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 على الرغم من.

أوصي دائمًا بتمرير قاموس قوائم إلى مُنشئ dataframe عند إنشاء dataframes. من الأسهل قراءتها للمطورين الآخرين. يحتوي 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': إذا كانت مفاتيح dict التي تم تمريرها يجب أن تكون أعمدة DataFrame الناتجة ، فتمر على "الأعمدة" (افتراضي). وإلا ، إذا كانت المفاتيح يجب أن تكون صفوفًا ، فمرر "الفهرس".

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

إذا كان لديك قاموس ، يمكنك تحويله إلى إطار بيانات pandas مع سطر التعليمات البرمجية التالي:

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