Python Pandas - Báo trước và Gotchas
Caveats có nghĩa là cảnh báo và gotcha có nghĩa là một vấn đề không thể nhìn thấy.
Sử dụng câu lệnh If / Truth với gấu trúc
Gấu trúc tuân theo quy ước numpy về việc mắc lỗi khi bạn cố gắng chuyển đổi thứ gì đó thành bool. Điều này xảy ra trong mộtif hoặc là when sử dụng các phép toán Boolean và, or, hoặc là not. Không rõ kết quả sẽ như thế nào. Nó có nên là True bởi vì nó không phải là zerolength? Sai vì có giá trị Sai? Nó không rõ ràng, vì vậy thay vào đó, Pandas tăng mộtValueError -
import pandas as pd
if pd.Series([False, True, False]):
print 'I am True'
Nó là output như sau -
ValueError: The truth value of a Series is ambiguous.
Use a.empty, a.bool() a.item(),a.any() or a.all().
Trong ifđiều kiện, không rõ phải làm gì với nó. Lỗi này gợi ý về việc có nên sử dụngNone hoặc là any of those.
import pandas as pd
if pd.Series([False, True, False]).any():
print("I am any")
Nó là output như sau -
I am any
Để đánh giá các đối tượng gấu trúc một phần tử trong ngữ cảnh Boolean, hãy sử dụng phương pháp .bool() -
import pandas as pd
print pd.Series([True]).bool()
Nó là output như sau -
True
Bitwise Boolean
Các toán tử Boolean của Bitwise như == và != sẽ trả về một chuỗi Boolean, hầu như luôn luôn là chuỗi bắt buộc.
import pandas as pd
s = pd.Series(range(5))
print s==4
Nó là output như sau -
0 False
1 False
2 False
3 False
4 True
dtype: bool
hoạt động isin
Điều này trả về một chuỗi Boolean cho biết liệu mỗi phần tử trong Chuỗi có được chứa chính xác trong chuỗi giá trị được truyền hay không.
import pandas as pd
s = pd.Series(list('abc'))
s = s.isin(['a', 'c', 'e'])
print s
Nó là output như sau -
0 True
1 False
2 True
dtype: bool
Reindexing vs ix Gotcha
Nhiều người dùng sẽ thấy mình sử dụng ix indexing capabilities như một phương tiện ngắn gọn để chọn dữ liệu từ một đối tượng 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']]
Nó là output như sau -
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
Tất nhiên, trong trường hợp này, điều này hoàn toàn tương đương với việc sử dụng reindex phương pháp -
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'])
Nó là output như sau -
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
Một số có thể kết luận rằng ix và reindex100% tương đương dựa trên điều này. Điều này đúng ngoại trừ trường hợp lập chỉ mục số nguyên. Ví dụ, hoạt động trên có thể được biểu diễn theo cách khác là:
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])
Nó là output như sau -
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
Điều quan trọng cần nhớ là reindex is strict label indexing only. Điều này có thể dẫn đến một số kết quả có khả năng gây ngạc nhiên trong các trường hợp bệnh lý khi một chỉ mục chứa cả số nguyên và chuỗi.