English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
ملاحظات Pandas ومواقف
عندما تستخدم محسوبات بولية مثل if أو when، or أو not، وتحاول تحويل بعض المحتويات إلى bool، قد يحدث خطأ. لم يتم تحديد كيفية حدوث الخطأ حتى الآن. قدم Pandas استثناء ValueError.
import pandas as pd if pd.Series([False, True, False]): print 'أنا حق'
النتائج التشغيلية كالتالي:
خطأ قيمة الحقيقة: قيمة سلسلة Series غير واضحة. استخدم a.empty, a.bool(), a.item(), a.any() أو a.all().
في هذه الحالة، لا يفهم كيفية التعامل مع ذلك. يشير هذا الخطأ إلى استخدام None أو أي منهم.
import pandas as pd if pd.Series([False, True, False]).any(): print "أنا أي"
النتائج التشغيلية كالتالي:
أنا أي
للتحقق من Pandas Object Simple Element في سياق بولي، استخدم دالة .bool()-
import pandas as pd print pd.Series([True]).bool()
النتائج التشغيلية كالتالي:
حق
سيتم عرض محسوبات بولية مثل == و!، ستعود دائمًا سلسلة بولية، وهو ما يكون دائمًا مطلوبًا تقريبًا.
import pandas as pd s = pd.Series(range(5)) print s==4
النتائج التشغيلية كالتالي:
0 خطأ 1 False 2 خطأ 3 خطأ 4 حق dtype: bool
سيتم عرض سلسلة بولية، تظهر لكل عنصر في القيمة المحددة ما إذا كان يحتوي على القيمة المحددة بالكامل.
import pandas as pd s = pd.Series(list('abc')) s = s.isin(['a', 'c', 'e']) print s
النتائج التشغيلية كالتالي:
0 True 1 False 2 True dtype: bool
العديد من المستخدمين يجدون أنفسهم يستخدمون وظيفة مؤشر ix كطريقة مختصرة لتحديد البيانات من عناصر Pandas:
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(6, 4), columns=['one', 'two', 'three', four'],index=list('abcdef')) print df print df.ix[['b', 'c', 'e']]
النتائج التشغيلية كالتالي:
one two three four a -1.582025 1.335773 0.961417 -1.272084 b 1.461512 0.111372 -0.072225 0.553058 c -1.240671 0.762185 1.511936 -0.630920 d -2.380648 -0.029981 0.196489 0.531714 e 1.846746 0.148149 0.275398 -0.244559 f -1.842662 -0.933195 2.303949 0.677641 one two three four b 1.461512 0.111372 -0.072225 0.553058 c -1.240671 0.762185 1.511936 -0.630920 e 1.846746 0.148149 0.275398 -0.244559
بالطبع، في هذه الحالة، هذا متطابق تمامًا مع استخدام طريقة reindex:
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(6, 4), columns=['one', 'two', 'three', four'],index=list('abcdef')) print df print df.reindex(['b', 'c', 'e'])
النتائج التشغيلية كالتالي:
one two three four a 1.639081 1.369838 0.261287 -1.662003 b -0.173359 0.242447 -0.494384 0.346882 c -0.106411 0.623568 0.282401 -0.916361 d -1.078791 -0.612607 -0.897289 -1.146893 e 0.465215 1.552873 -1.841959 0.329404 f 0.966022 -0.190077 1.324247 0.678064 one two three four b -0.173359 0.242447 -0.494384 0.346882 c -0.106411 0.623568 0.282401 -0.916361 e 0.465215 1.552873 -1.841959 0.329404
من الممكن أن يأتي إلى الاستنتاج أن ix و reindex بناءً على ذلك متطابقان بنسبة 100٪. باستثناء حالات المؤشرات الصحيحة، هذا هو الحال دائمًا. على سبيل المثال، يمكن تعويض العمليات المذكورة أعلاه بـ:
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(6, 4), columns=['one', 'two', 'three', four'],index=list('abcdef')) print df print df.ix[[1, 2, 4]] print df.reindex([1, 2, 4])
النتائج التشغيلية كالتالي:
one two three four a -1.015695 -0.553847 1.106235 -0.784460 b -0.527398 -0.518198 -0.710546 -0.512036 c -0.842803 -1.050374 0.787146 0.205147 d -1.238016 -0.749554 -0.547470 -0.029045 e -0.056788 1.063999 -0.767220 0.212476 f 1.139714 0.036159 0.201912 0.710119 one two three four b -0.527398 -0.518198 -0.710546 -0.512036 c -0.842803 -1.050374 0.787146 0.205147 e -0.056788 1.063999 -0.767220 0.212476 one two three four 1 NaN NaN NaN NaN 2 NaN NaN NaN NaN 4 NaN NaN NaN NaN
من المهم تذكر أن إعادة إنشاء المؤشر ليست سوى مؤشر تسمية صارمة. في الحالات التي تحتوي المؤشرات على أرقام و