อย่างไร (และทำไม) ในการทำสำเนา pandas dataframe


ทุกครั้งที่คุณสร้างชุดย่อยของ Pandas DataFrame แล้วแก้ไขชุดย่อย DataFrame ดั้งเดิมก็จะถูกแก้ไขด้วย

ด้วยเหตุนี้ จึงควรใช้ .copy() เมื่อทำการตั้งค่าย่อย เพื่อไม่ให้การเปลี่ยนแปลงที่คุณทำกับชุดย่อยนั้นทำกับ DataFrame ดั้งเดิมด้วย

ตัวอย่างต่อไปนี้แสดงวิธี (และเหตุผล) ในการทำสำเนา DataFrame ของ pandas เมื่อตั้งค่าย่อย

ตัวอย่างที่ 1: การตั้งค่าย่อย DataFrame โดยไม่มีสำเนา

สมมติว่าเรามี DataFrame แพนด้าดังต่อไปนี้:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'],
                   ' points ': [18, 22, 19, 14, 14, 11, 20, 28],
                   ' assists ': [5, 7, 7, 9, 12, 9, 9, 4]})

#view DataFrame
print (df)

  team points assists
0 to 18 5
1 B 22 7
2 C 19 7
3 D 14 9
4 E 14 12
5 F 11 9
6 G 20 9
7:28 a.m. 4

ตอนนี้ สมมติว่าเราสร้างเซ็ตย่อยที่มีเพียงสี่แถวแรกของ DataFrame ดั้งเดิม:

 #define subsetted DataFrame
df_subset = df[0:4]

#view subsetted DataFrame
print (df_subset)

  team points assists rebounds
0 A 18 5 11
1 B 22 7 8
2 C 19 7 10
3 D 14 9 6

หากเราเปลี่ยนค่าใด ๆ ในชุดย่อย ค่าของ DataFrame ดั้งเดิมก็จะเปลี่ยนไปด้วย:

 #change first value in team column
df_subset. team [0] = ' X '

#view subsetted DataFrame
print (df_subset)

  team points assists
0X18 5
1 B 22 7
2 C 19 7
3 D 14 9

#view original DataFrame
print (df)

  team points assists
0X18 5
1 B 22 7
2 C 19 7
3 D 14 9
4 E 14 12
5 F 11 9
6 G 20 9
7:28 a.m. 4

โปรดทราบว่าค่าแรกของคอลัมน์ทีมเปลี่ยนจาก “A” เป็น “X” ทั้งใน DataFrame เซ็ตย่อย และ DataFrame ดั้งเดิม

เนื่องจากเราไม่ได้ทำสำเนาของ DataFrame ดั้งเดิม

ตัวอย่างที่ 2: การตั้งค่าย่อย DataFrame ด้วยการคัดลอก

สมมติว่าเรามี DataFrame แพนด้าดังต่อไปนี้:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'],
                   ' points ': [18, 22, 19, 14, 14, 11, 20, 28],
                   ' assists ': [5, 7, 7, 9, 12, 9, 9, 4]})

#view DataFrame
print (df)

  team points assists
0 to 18 5
1 B 22 7
2 C 19 7
3 D 14 9
4 E 14 12
5 F 11 9
6 G 20 9
7:28 a.m. 4

สมมติว่าเราสร้างเซ็ตย่อยที่ประกอบด้วยสี่แถวแรกของ DataFrame ดั้งเดิม แต่คราวนี้เราใช้ .copy() เพื่อสร้างสำเนาของ DataFrame ดั้งเดิม:

 #define subsetted DataFrame
df_subset = df[0:4]. copy ()

ตอนนี้ สมมติว่าเราเปลี่ยนค่าแรกของคอลัมน์ทีมของชุดย่อย DataFrame:

 #change first value in team column
df_subset. team [0] = ' X '

#view subsetted DataFrame
print (df_subset)

  team points assists
0X18 5
1 B 22 7
2 C 19 7
3 D 14 9

#view original DataFrame
print (df)

  team points assists
0 to 18 5
1 B 22 7
2 C 19 7
3 D 14 9
4 E 14 12
5 F 11 9
6 G 20 9
7:28 a.m. 4

โปรดทราบว่าค่าแรกของคอลัมน์ทีมเปลี่ยนจาก “A” เป็น “X” เฉพาะในชุดย่อย DataFrame

DataFrame ดั้งเดิมยังคงสภาพเดิมเนื่องจากเราใช้ .copy() เพื่อทำสำเนาของมันเมื่อสร้างเซ็ตย่อย

แหล่งข้อมูลเพิ่มเติม

บทช่วยสอนต่อไปนี้จะอธิบายวิธีดำเนินการทั่วไปอื่น ๆ ในแพนด้า:

วิธีลบแถวใน Pandas DataFrame ตามเงื่อนไข
วิธีกรอง Pandas DataFrame ในหลายเงื่อนไข
วิธีใช้ตัวกรอง “NOT IN” ใน Pandas DataFrame

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *