Hem dizeleri hem de tam sayıları içeren bir panda serisindeki değerleri kontrol ederken kafa karıştırıcı davranış [yinelenen]

Jan 05 2021

dtype: objectHem sayıları hem de karakterleri içeren bir panda serim var . O seride belirli bir değer olup olmadığını kontrol etmek istediğimde, belirli bir değerin varlığının nasıl kontrol edildiğiyle kafam karıştı.

Aşağıdaki örnek için, sezgisel olarak bekliyorum ki 'a', bu seride ve aynı zamanda '1'. Dahası, (tamsayı) değerinin 1dizide var olmasını beklemem çünkü dtype: objectpandalardaki AFAIK, python'un dize türüne kıyasla (kabaca?) Olabilir.

Bu davranış için bir açıklaması olan var mı?

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

Çıktı:

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

Yanıtlar

4 TomRon Jan 05 2021 at 19:01

Sorguladığınızda 1 in s, aslında içinde olup olmadığını soruyorsunuz s.index. 0 in sBunun da Doğru olacağını unutmayın .

'Leri aşağıdaki şekilde tanımlarsanız - s = pd.Series(['a',1,2], index=['a', 'b', 'c'])

Sonra -

1 in s #False

'a' in s #True

Ve değerlerin kendisiyle hiçbir ilgisi yoktur.