ฉันสับสนกับวิธีการจัดทำดัชนีที่แตกต่างกันที่ใช้ilocในแพนด้า
สมมติว่าฉันกำลังพยายามแปลงดาต้าเฟรม 1 วันเป็นดาต้าเฟลมแบบ 2 มิติ ก่อนอื่นฉันมี Dataframe 1-d ต่อไปนี้
a_array = [1,2,3,4,5,6,7,8]
a_df = pd.DataFrame(a_array).T
และฉันจะไปแปลงที่เป็น 2 มิติ Dataframe 2x4กับขนาดของ ฉันเริ่มต้นด้วยการตั้งค่า Dataframe 2 มิติดังต่อไปนี้:
b_df = pd.DataFrame(columns=range(4),index=range(2))
จากนั้นฉันใช้ for-loop เพื่อช่วยฉันแปลงa_df(1-d) เป็นb_df(2-d) ด้วยรหัสต่อไปนี้
for i in range(2):
b_df.iloc[i,:] = a_df.iloc[0,i*4:(i+1)*4]
มันให้ผลลัพธ์ต่อไปนี้กับฉันเท่านั้น
0 1 2 3
0 1 2 3 4
1 NaN NaN NaN NaN
แต่เมื่อฉันเปลี่ยนไปb_df.iloc[i,:] b_df.iloc[i][:]ผลลัพธ์นั้นถูกต้องเช่นนี้ซึ่งเป็นสิ่งที่ฉันต้องการ
0 1 2 3
0 1 2 3 4
1 5 6 7 8
ทุกคนสามารถอธิบายให้ฉันเข้าใจได้ว่าความแตกต่างระหว่าง.iloc[i,:]และ.iloc[i][:]คืออะไรและทำไมจึง.iloc[i][:]ทำงานในตัวอย่างของฉันด้านบน แต่ไม่.iloc[i,:]
b_df.iloc[1] = a_df.iloc[0, 4:8]กำหนดชุดที่มีค่าดัชนีชุดที่มีดัชนี[4, 5, 6, 7][0, 1, 2, 3]ไม่มีการทับซ้อนดังนั้นจึงNaNได้รับมอบหมายให้องค์ประกอบทั้งหมด จนถึงจุดนี้มันสมเหตุสมผลสำหรับฉัน แต่เหมือนคุณฉันไม่มีความชัดเจนว่าทำไมถึงb_df.iloc[1][:] = ...มีพฤติกรรมแตกต่างกัน - ตรวจสอบวัตถุb_df.iloc[1]และb_df.iloc[1][:]ไม่เปิดเผยความแตกต่างระหว่างดัชนี การคาดเดาที่ดีที่สุดของฉันคือการกำหนดให้คัดลอกโดยตรง ([:]) จะถือว่าเป็นกรณีพิเศษโดย Pandas ซึ่งทำให้ไม่สนใจดัชนีของผู้รับโอนและสร้างความคลาดเคลื่อนนี้