พฤติกรรมที่สับสนเมื่อตรวจสอบค่าในชุดหมีแพนด้าซึ่งมีทั้งสตริงและจำนวนเต็ม [ซ้ำกัน]

Jan 05 2021

ฉันมีชุดหมีแพนด้าdtype: objectที่มีทั้งตัวเลขและตัวอักษร เมื่อฉันต้องการตรวจสอบว่ามีค่าบางค่าอยู่ในชุดข้อมูลนั้นหรือไม่ฉันก็สับสนกับวิธีการตรวจสอบการมีอยู่ของค่าหนึ่ง ๆ

สำหรับตัวอย่างด้านล่างฉันคาดหวังโดยสังหรณ์ใจนั่น'a'คือในซีรีส์และ'1'ด้วย นอกจากนี้ฉันไม่คาดหวังว่าค่า (จำนวนเต็ม) จะ1มีอยู่ในชุดนี้เนื่องจาก AFAIK dtype: objectในแพนด้าสามารถเทียบกับประเภทสตริงของ python ได้

ใครมีคำอธิบายสำหรับพฤติกรรมนี้หรือไม่?

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

และไม่มีส่วนเกี่ยวข้องกับค่านิยมในตัวเอง