次のテストコードについて、3行目(インデックス2)の内容test1
とtest2
が異なる理由を誰かが説明できますか?私はコードをlatest1
で記述し、test2
それを解決するためにlaを書き直す前に、コードが機能しない理由を理解しようとして数時間を無駄にしました。生成に使用されるワンライナーのパンダ内の操作の順序はtest1
何ですか?
import pandas as pd
# test data
dat1 = [1,1,2,1]
dat2 = ['a','b','c','d'] # only for building a multi-column DF, not otherwise used
dat3 = [False,False,True,False]
# build a dataframe
df = pd.DataFrame( data={ "Data1":dat1, "Data2":dat2})
# first test
test1 = df['Data1']==1 | pd.Series(dat3)
print('==test 1==')
print(test1)
# second test
tmp1 = df['Data1']==1
tmp2 = pd.Series(dat3)
test2 = tmp1 | tmp2
print('==test 2==')
print(test2)
出力は
==test 1==
0 True
1 True
2 False
3 True
dtype: bool
==test 2==
0 True
1 True
2 True
3 True
dtype: bool
違いは、演算子の優先順位が原因で発生します。次のことを試してください。
test1 = (df['Data1']==1) | pd.Series(dat3) # Note the parenthesis (df['Data1']==1)
次に、両方が等しいことがわかります。
# first test
test1 = (df['Data1']==1) | pd.Series(dat3)
print('==test 1==')
print(test1)
# second test
tmp1 = df['Data1']==1
tmp2 = pd.Series(dat3)
test2 = tmp1 | tmp2
print('==test 2==')
print(test2)
==test 1==
0 True
1 True
2 True
3 True
dtype: bool
==test 2==
0 True
1 True
2 True
3 True
dtype: bool
あなたがするとき:
df['Data1']==1 | pd.Series(dat3)
これは次のように評価されます。
df['Data1'] == (1 | pd.Series(dat3))
これを回避するには、条件ごとに括弧を使用します。
test1 = (df['Data1']==1) | pd.Series(dat3)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加