ฉันสับสนเกี่ยวกับกฎที่ Pandas ใช้เมื่อตัดสินใจว่าการเลือกจาก dataframe เป็นสำเนาของ dataframe ดั้งเดิมหรือมุมมองจากต้นฉบับ
ตัวอย่างเช่นถ้าฉันมี
df = pd.DataFrame(np.random.randn(8,8), columns=list('ABCDEFGH'), index=range(1,9))
ฉันเข้าใจว่าquery
ส่งคืนสำเนาเพื่อให้เป็นเช่นนั้น
foo = df.query('2 < index <= 5')
foo.loc[:,'E'] = 40
จะไม่มีผลกับ dataframe ดั้งเดิม, df
. ฉันยังเข้าใจว่าสเกลาร์หรือส่วนที่ตั้งชื่อส่งคืนมุมมองดังนั้นการมอบหมายให้กับสิ่งเหล่านี้เช่น
df.iloc[3] = 70
หรือ
df.ix[1,'B':'E'] = 222
จะเปลี่ยนdf
ไป แต่ฉันหลงทางเมื่อต้องเจอกับคดีที่ซับซ้อนกว่านี้ ตัวอย่างเช่น,
df[df.C <= df.B] = 7654321
การเปลี่ยนแปลงdf
แต่
df[df.C <= df.B].ix[:,'B':'E']
ไม่.
มีกฎง่ายๆไหมที่นุ่นใช้ว่าฉันหายไป? เกิดอะไรขึ้นในกรณีเฉพาะเหล่านี้ และโดยเฉพาะอย่างยิ่งฉันจะเปลี่ยนค่าทั้งหมด (หรือส่วนย่อยของค่า) ในดาต้าเฟรมที่ตรงกับข้อความค้นหาหนึ่ง ๆ ได้อย่างไร (ตามที่ฉันพยายามทำในตัวอย่างสุดท้ายด้านบน)
หมายเหตุ: นี่คือไม่ได้เช่นเดียวกับคำถามนี้ ; และฉันได้อ่านเอกสารแต่ไม่ได้รู้แจ้ง ฉันได้อ่านคำถาม "ที่เกี่ยวข้อง" ในหัวข้อนี้เช่นกัน แต่ฉันยังขาดกฎง่ายๆที่ Pandas ใช้อยู่และฉันจะนำไปใช้อย่างไรเช่น - แก้ไขค่า (หรือส่วนย่อยของค่า) ในดาต้าเฟรมที่ตอบสนองการค้นหาเฉพาะ
.query
จะส่งคืนสำเนาทุกครั้งเนื่องจากสิ่งที่ทำ (ไม่ใช่มุมมอง) เพราะประเมินโดย n numexpr ดังนั้นฉันจะเพิ่มมันเข้าไปใน 'กฎ'