Pandas 注意事項

Pandas 注意事項和陷阱

在Pandas中使用If/Truth語句

當(dāng)您使用布爾運算符if或when,or或or not,嘗試將某些內(nèi)容轉(zhuǎn)換為bool時,有時會引發(fā)一個錯誤。錯誤是怎么發(fā)生的目前尚不清楚。Pandas提出了一個ValueError異常。

 import pandas as pd
 if pd.Series([False, True, False]):
    print 'I am True'

運行結(jié)果如下:

 ValueError: The truth value of a Series is ambiguous. 
 Use a.empty, a.bool() a.item(),a.any() or a.all().

在這種情況下,不清楚該怎么處理。這個錯誤暗示了是使用None或是其中任何一個。.

 import pandas as pd
 if pd.Series([False, True, False]).any():
    print("I am any")

運行結(jié)果如下:

I am any

要在布爾上下文中評估單元素Pandas對象,請使用.bool()方法-

import pandas as pd
print pd.Series([True]).bool()

運行結(jié)果如下:

True

位布爾值

像==和!之類的按位布爾運算符=將返回一個布爾序列,這幾乎總是需要的。

 import pandas as pd
 s = pd.Series(range(5))
 print s==4

運行結(jié)果如下:

 0 False
 1 False
 2 False
 3 False
 4 True
 dtype: bool

isin操作

這將返回一個布爾系列,顯示布爾值中的每個元素是否完全包含在傳遞的值序列中。

 import pandas as pd
 s = pd.Series(list('abc'))
 s = s.isin(['a', 'c', 'e'])
 print s

運行結(jié)果如下:

 0 True
 1 False
 2 True
 dtype: bool

重建索引 vs ix索引

許多用戶會發(fā)現(xiàn)自己使用ix索引功能作為從Pandas對象中選擇數(shù)據(jù)的一種簡潔方法:

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

運行結(jié)果如下:

        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

當(dāng)然,在這種情況下,這完全等同于使用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'])

運行結(jié)果如下:

        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

有人可能會得出結(jié)論,ix和reindex基于此是100%等效的。除了整數(shù)索引的情況外,都是如此。例如,上述操作可以代替地表示為:

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

運行結(jié)果如下:

        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

重要的是要記住,重新索引僅是嚴(yán)格的標(biāo)簽索引。在索引包含例如整數(shù)和字符串的出錯情況下,這可能導(dǎo)致某些可能令人意想不到的結(jié)果。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清