文字列と整数の両方を含むパンダシリーズの値をチェックするときの紛らわしい動作[重複]

Jan 05 2021

dtype: object数字と文字の両方を含むパンダシリーズがあります。そのシリーズに特定の値が存在するかどうかを確認したいとき、特定の値の存在を確認する方法に戸惑いました。

以下の例では、私は直感的に期待します。それ'a'はシリーズの中にあり、また'1'です。さらに、パンダの1AFAIKはdtype: objectPythonの文字列型と(大まかに?)比較できるため、(整数)値がシリーズに存在するとは思いません。

誰かがこの振る舞いの説明を持っていますか?

s = pd.Series(['a',1,2])

if 'a' in  s: 
    print('a is in s')
else:
    print('a is not in s')
if '1' in s:
    print('string 1 is in s')
else: 
    print('string 1 is not in s')
if 1 in s:
    print('integer 1 is in s')
else:
    print('integer 1 is not in s')

出力:

a is not in s
string 1 is not in s
integer 1 is in s

回答

4 TomRon Jan 05 2021 at 19:01

あなたが質問し1 in sているとき、あなたはそれがにあるかどうかを実際に尋ねていs.indexます。これ0 in sもTrueになることに注意してください。

次のようにsを定義する場合- s = pd.Series(['a',1,2], index=['a', 'b', 'c'])

次に-

1 in s #False

'a' in s #True

そして、それは値自体とは何の関係もありません。