เริ่มต้นจาก pandas 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
เราสามารถใช้ตรรกะ เงื่อนไข หรือการดำเนินการใดๆ ที่ส่งคืนชุดของบูลีนเพื่อสร้างอาร์เรย์ของบูลีน ในตัวอย่างข้างต้น เราต้องการ rows
ใดๆ ที่มี 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
สำหรับข้อมูลเพิ่มเติม โปรดดูเอกสารประกอบการจัดทำดัชนีขั้นสูงที่นี่
person
Mohamed Ali JAMAOUI
schedule
04.07.2017
where
ของ NumPy ตามที่เห็นใน วิธีแก้ปัญหาด้านล่างนี้ - person Ted Petrou   schedule 03.11.2017