Python Pandas-주의 사항 및 문제
경고는 경고를 의미하고 gotcha는 보이지 않는 문제를 의미합니다.
Pandas에서 If / Truth 문 사용
Pandas는 무언가를 변환하려고 할 때 오류를 발생시키는 numpy 규칙을 따릅니다. bool. 이것은if 또는 when 부울 연산을 사용하고, or, 또는 not. 결과가 무엇인지 명확하지 않습니다. 길이가 0이 아니므로 True 여야합니까? False 값이 있기 때문에 False? 불분명합니다. 대신 Pandas는ValueError −
import pandas as pd
if pd.Series([False, True, False]):
print 'I am True'
이것의 output 다음과 같습니다-
ValueError: The truth value of a Series is ambiguous.
Use a.empty, a.bool() a.item(),a.any() or a.all().
에 if조건, 그것으로 무엇을 해야할지 불분명합니다. 이 오류는 사용 여부를 암시합니다.None 또는 any of those.
import pandas as pd
if pd.Series([False, True, False]).any():
print("I am any")
이것의 output 다음과 같습니다-
I am any
부울 컨텍스트에서 단일 요소 pandas 객체를 평가하려면 다음 메소드를 사용하십시오. .bool() −
import pandas as pd
print pd.Series([True]).bool()
이것의 output 다음과 같습니다-
True
비트 부울
== 및 같은 비트 부울 연산자 != 거의 항상 필요한 부울 시리즈를 반환합니다.
import pandas as pd
s = pd.Series(range(5))
print s==4
이것의 output 다음과 같습니다-
0 False
1 False
2 False
3 False
4 True
dtype: bool
isin 운영
이것은 Series의 각 요소가 전달 된 값 시퀀스에 정확히 포함되어 있는지 여부를 보여주는 부울 계열을 반환합니다.
import pandas as pd
s = pd.Series(list('abc'))
s = s.isin(['a', 'c', 'e'])
print s
이것의 output 다음과 같습니다-
0 True
1 False
2 True
dtype: bool
재색 인 vs ix Gotcha
많은 사용자가 ix indexing capabilities 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']]
이것의 output 다음과 같습니다-
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'])
이것의 output 다음과 같습니다-
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])
이것의 output 다음과 같습니다-
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
기억하는 것이 중요합니다 reindex is strict label indexing only. 이것은 인덱스에 정수와 문자열이 모두 포함 된 병리학적인 경우에 잠재적으로 놀라운 결과를 초래할 수 있습니다.