كيف (ولماذا) عمل نسخة من pandas dataframe
في كل مرة تقوم فيها بإنشاء مجموعة فرعية من DataFrame الباندا ثم تعديل المجموعة الفرعية، سيتم أيضًا تعديل DataFrame الأصلي.
لهذا السبب، من الجيد دائمًا استخدام .copy() عند الإعداد الفرعي بحيث لا يتم إجراء التغييرات التي تجريها على المجموعة الفرعية أيضًا على DataFrame الأصلي.
توضح الأمثلة التالية كيفية (ولماذا) عمل نسخة من pandas DataFrame عند الإعداد الفرعي.
مثال 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