English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

ملاحظات هامة في Pandas

ملاحظات Pandas ومواقف

استخدام If/Truth في 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

عملية isin

سيتم عرض سلسلة بولية، تظهر لكل عنصر في القيمة المحددة ما إذا كان يحتوي على القيمة المحددة بالكامل.

 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

العديد من المستخدمين يجدون أنفسهم يستخدمون وظيفة مؤشر 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

من المهم تذكر أن إعادة إنشاء المؤشر ليست سوى مؤشر تسمية صارمة. في الحالات التي تحتوي المؤشرات على أرقام و