เริ่มต้นจากหมีแพนด้า 0.20 ix จะเลิก วิธีที่ถูกต้องคือการใช้df.loc
นี่คือตัวอย่างการทำงาน
>>> import pandas as pd
>>> import numpy as np
>>> df = pd.DataFrame({"A":[0,1,0], "B":[2,0,5]}, columns=list('AB'))
>>> df.loc[df.A == 0, 'B'] = np.nan
>>> df
A B
0 0 NaN
1 1 0
2 0 NaN
>>>
คำอธิบาย:
ตามที่อธิบายไว้ในเอกสารที่นี่ , .loc
เป็นหลักป้ายกำกับตาม แต่ยังอาจจะใช้กับอาร์เรย์แบบบูล
ดังนั้นสิ่งที่เราทำข้างต้นคือการใช้df.loc[row_index, column_index]
โดย:
- การใช้ประโยชน์จากความจริงที่
loc
สามารถใช้อาร์เรย์แบบบูลเป็นรูปแบบที่บอกแพนด้าซึ่งเป็นส่วนย่อยของแถวที่เราต้องการเปลี่ยนrow_index
- การใช้ประโยชน์จากข้อเท็จจริง
loc
ก็คือป้ายกำกับตามการเลือกคอลัมน์โดยใช้ป้ายกำกับ'B'
ในcolumn_index
เราสามารถใช้ตรรกะเงื่อนไขหรือการดำเนินการใด ๆ ที่ส่งกลับชุดของ booleans เพื่อสร้างอาร์เรย์ของ booleans ในตัวอย่างด้านบนเราต้องการสิ่งใด ๆrows
ที่มี a 0
เพื่อที่เราจะได้ใช้df.A == 0
ดังที่คุณเห็นในตัวอย่างด้านล่างนี่จะส่งคืนชุดบูลีน
>>> df = pd.DataFrame({"A":[0,1,0], "B":[2,0,5]}, columns=list('AB'))
>>> df
A B
0 0 2
1 1 0
2 0 5
>>> df.A == 0
0 True
1 False
2 True
Name: A, dtype: bool
>>>
จากนั้นเราใช้อาร์เรย์ด้านบนของบูลีนเพื่อเลือกและแก้ไขแถวที่จำเป็น:
>>> df.loc[df.A == 0, 'B'] = np.nan
>>> df
A B
0 0 NaN
1 1 0
2 0 NaN
สำหรับข้อมูลเพิ่มเติมตรวจสอบเอกสารการจัดทำดัชนีขั้นสูงที่นี่
where
ตามที่เห็นในวิธีแก้ปัญหาด้านล่างนี้