Creating a Series by passing a list of values, letting pandas create a default integer index:
In [3]: s = pd.Series([1, 3, 5, np.nan, 6, 8])
In [4]: s Out[4]:
0 1.0
1 3.0
2 5.0
3 NaN
4 6.0
5 8.0
dtype: float64
اشرح الكود السابق
الكود السابق يقوم بإنشاء كائن Series في مكتبة Pandas باستخدام الدالة pd.Series(). يتم تمرير قائمة من القيم إلى الدالة وهي [1, 3, 5, np.nan, 6, 8]، حيث يتم تعيين هذه القيم كقيم لكل عنصر في السلسلة.
عندما لا يتم توفير فهرس للقيم في القائمة الممررة، يقوم Pandas تلقائيًا بإنشاء فهرس رقمي افتراضي يتم تعيينه لكل عنصر في السلسلة. وتظهر النتيجة في الشكل التالي:
حيث تم تعيين القيم الرقمية في العمود الأول بين 0 و 5 كفهرس لكل عنصر في السلسلة، وتم تعيين القيم الثانوية المماثلة في العمود الثاني. يمثل NaN القيمة التي لا يتم تعيينها، وهي تمثل "ليس رقمًا" وتستخدم لإشارة إلى القيم المفقودة أو الغير معروفة.
يمكن إنشاء السلسلة المذكورة في السؤال باستخدام عدة صيغ مختلفة، وفيما يلي بعض الأمثلة:
1- استخدام قائمة من القيم المحددة:
import pandas as pd
import numpy as np
my_list = [1, 3, 5, np.nan, 6, 8]
s = pd.Series(my_list)
print(s)
3- استخدام قائمة من الأحرف كفهرس وقائمة من القيم كقيم لكل عنصر في السلسلة:
import pandas as pd
values = [1, 3, 5, None, 6, 8]
index = ['a', 'b', 'c', 'd', 'e', 'f']
s = pd.Series(values, index=index)
print(s)
4- استخدام اسم دالة لتعيين القيم لكل عنصر في السلسلة:
import pandas as pd
s = pd.Series(range(1, 7))
print(s)
يمكن استخدام الصيغ المذكورة أعلاه لإنشاء السلسلة بطرق مختلفة وفقًا لمتطلبات البرنامج.
تفضل بإلقاء نظرة على المثال التالي لإنشاء سلسلة باستخدام بعض الصيغ الأساسية المتاحة:
import pandas as pd
import numpy as np
# Create a pandas Series using a list of values
s1 = pd.Series([1, 2, 3, 4])
print(s1)
# Create a pandas Series using a dictionary
s2 = pd.Series({'a': 1, 'b': 2, 'c': 3, 'd': 4})
print(s2)
# Create a pandas Series using a list of values and a custom index
s3 = pd.Series([10, 20, 30, 40], index=['A', 'B', 'C', 'D'])
print(s3)
# Create a pandas Series using NumPy array with missing values
s4 = pd.Series(np.array([1, 2, 3, np.nan, 5, 6]))
print(s4)
# Create a pandas Series with a fixed step size
s5 = pd.Series(range(0, 10, 2))
print(s5)
يتم إنشاء السلسلة في كل مثال باستخدام صيغة مختلفة، وذلك باستخدام القائمة، القاموس، القائمة مع فهرس مخصص، مصفوفة NumPy، وخطوة ثابتة (fixed step)، على التوالي.
Creating a DataFrame by passing a NumPy array, with a datetime index and labeled columns:
dates = pd.date_range('20130101', periods=6) In [6]: dates
الكود السابق يستخدم دالة pd.date_range() في مكتبة Pandas لإنشاء فهرس تاريخي باستخدام تاريخ بداية وعدد الفترات المطلوبة.
في هذا المثال، يتم تعيين التاريخ الأولي باستخدام السلسلة '20130101'، ويتم تمرير عدد الفترات المطلوبة بواسطة الخيار periods الذي تم تعيينه هنا على 6. سيؤدي ذلك إلى إنشاء فهرس تاريخي يحتوي على 6 تواريخ، والتي تكون موزعة على فترة 6 أيام اعتبارًا من التاريخ الأولي الذي تم تعيينه. وسيتم تخزين هذه التواريخ في متغير dates.
عند طباعة dates، سيتم عرض فهرس التواريخ، حيث يكون تنسيق الفهرس هو YYYY-MM-DD، كما يلي:
الكود يتضمن عملية إنشاء DataFrame باستخدام مصفوفة NumPy وفهرس datetime تم إنشاؤه في السطر السابق.
في السطر رقم 7، يتم إنشاء DataFrame باستخدام pd.DataFrame()، ويتم تمرير مصفوفة np.random.randn(6, 4) كقيم للبيانات، وفهرس dates كفهرس الصفوف، وقائمة المسميات ['A', 'B', 'C', 'D'] كأعمدة مسماة.
عند طباعة DataFrame الناتج في السطر رقم 8، تظهر القيم الموجودة في كل خلية في الصفوف والأعمدة. تم استخدام حرف كلمة "list" لتحويل السلسلة 'ABCD' إلى قائمة من المسميات الفردية للأعمدة. تلاحظ أن كل قيمة في الصفوف تم تعيينها بشكل عشوائي باستخدام np.random.randn() والتي تم إنشاؤها في DataFrame.
تم تخزين DataFrame الناتج في متغير df.
Creating a DataFrame by passing a dict of objects that can be converted to series-like
يتيح لنا استخدام القاموس (Dict) في مكتبة Pandas إنشاء DataFrame. يتم إنشاء DataFrame من خلال تمرير قاموس من الكائنات المماثلة لسلسلة Series-like.
يمكن تمثيل القاموس كزوج من القيم، حيث يتم استخدام المفتاح كاسم العمود وقيمة المفتاح تمثل البيانات في العمود. يمكن تمثيل القيم باستخدام مجموعة من الأنواع، بما في ذلك سلسلة، قائمة، مصفوفة NumPy، أو DataFrame آخر. يتم تحويل الكائنات الأخرى إلى Series قبل إنشاء DataFrame.
يمكن القيام بذلك بالتالي:
import pandas as pd
# create a dictionary with data
data_dict = {'A': [1, 2, 3], 'B': ['a', 'b', 'c'], 'C': pd.Series([0.1, 0.2, 0.3])}
# create a DataFrame from the dictionary
df = pd.DataFrame(data_dict)
# print the resulting DataFrame
print(df)
في هذا المثال، يتم إنشاء قاموس data_dict الذي يحتوي على 3 مفاتيح A و B و C، وقيمهم هي قائمة [1, 2, 3] وقائمة ['a', 'b', 'c'] وسلسلة Series [0.1, 0.2, 0.3] على التوالي.
ثم يتم إنشاء DataFrame باستخدام pd.DataFrame() والذي يتم تمرير القاموس data_dict كمدخل. يتم تحويل القائمة والسلسلة إلى سلسلة Series قبل إنشاء DataFrame.
أخيرًا، يتم طباعة DataFrame الناتج باستخدام print().
ستتم طباعة DataFrame الناتج التي يتم إنشاؤها في هذا المثال كالتالي:
A B C
0 1 a 0.1
1 2 b 0.2
2 3 c 0.3
يمكن ملاحظة أن اسماء الأعمدة تتوافق مع المفاتيح في القاموس والتي تم تمثيلها بأشكال مختلفة من البيانات، ولكنها تم تحويلها جميعًا إلى Series قبل إنشاء DataFrame.
أمثلة على إنشاء DataFrame باستخدام قاموس:
1- إنشاء DataFrame باستخدام قاموس مع سلسلات Series وقائمة:
import pandas as pd
# create a dictionary with data
data_dict = {'A': pd.Series([1, 2, 3]), 'B': pd.Series(['a', 'b', 'c']), 'C': [0.1, 0.2, 0.3]}
# create a DataFrame from the dictionary
df = pd.DataFrame(data_dict)
# print the resulting DataFrame
print(df)
ستتم طباعة DataFrame الناتج:
A B C
0 1 a 0.1
1 2 b 0.2
2 3 c 0.3
2- إنشاء DataFrame باستخدام قاموس مع قائمة ومصفوفة NumPy:
import pandas as pd
import numpy as np
# create a dictionary with data
data_dict = {'A': [1, 2, 3], 'B': np.random.randn(3), 'C': [0.1, 0.2, 0.3]}
# create a DataFrame from the dictionary
df = pd.DataFrame(data_dict)
# print the resulting DataFrame
print(df)
ستتم طباعة DataFrame الناتج:
A B C
0 1 -0.996343 0.1
1 2 0.080971 0.2
2 3 0.296342 0.3
3- إنشاء DataFrame باستخدام قاموس مع قائمة وقائمة وسلسلة Series:
import pandas as pd
# create a dictionary with data
data_dict = {'A': [1, 2, 3], 'B': ['a', 'b', 'c'], 'C': pd.Series([0.1, 0.2, 0.3])}
# create a DataFrame from the dictionary
df = pd.DataFrame(data_dict)
# print the resulting DataFrame
print(df)
ستتم طباعة DataFrame الناتج:
A B C
0 1 a 0.1
1 2 b 0.2
2 3 c 0.3
يمكن ملاحظة أن جميع الأمثلة تستخدم قاموس مع القيم المختلفة التي يمكن تحويلها إلى Series-like objects، وتم إنشاء DataFrame باستخدام pd.DataFrame() والذي يتم تمرير القاموس كمدخل.
يتضمن الكود إنشاء DataFrame جديد باستخدام قاموس يحتوي على مختلف أنواع البيانات.
في السطر 9، يتم إنشاء قاموس يحتوي على المفاتيح 'A' و 'B' و 'C' و 'D' و 'E' و 'F'، والتي تمثل كل من:
'A': قيمة عددية عائمة 1.0.
'B': القيمة الزمنية لـ pd.Timestamp() في '2013-01-02'.
'C': سلسلة Series مع قيمة واحدة 1.0 وتم تحديد نوع البيانات لتكون عائمة من النوع 'float32'.
'D': مصفوفة NumPy مكونة من 4 أعداد 3 وتم تحديد نوع البيانات لتكون صحيحة من النوع 'int32'.
'E': سلسلة Categorical يحتوي على أسماء 'test' و 'train' والتي تم تحويلها إلى فئات Categorical.
'F': القيمة الثابتة 'foo' لجميع الصفوف.
ثم يتم إنشاء DataFrame الجديد باستخدام pd.DataFrame()، والذي يتم تمرير القاموس الذي تم إنشاؤه في السطر 9 كمدخل.
أخيرًا، يتم طباعة DataFrame الناتج في السطر 10 باستخدام print().
ستتم طباعة DataFrame الناتج في هذا المثال كالتالي:
A B C D E F
0 1.0 2013-01-02 1.0 3 test foo
1 1.0 2013-01-02 1.0 3 train foo
2 1.0 2013-01-02 1.0 3 test foo
3 1.0 2013-01-02 1.0 3 train foo
يمكن ملاحظة أن DataFrame الناتج يحتوي على الأعمدة 'A' و 'B' و 'C' و 'D' و 'E' و 'F' والتي تمثل كل من الأنواع المختلفة للبيانات الممثلة في القاموس.
The columns of the resulting DataFrame have different dtypes.
تعني هذه الجملة أن الأعمدة في DataFrame الناتج لها أنواع بيانات مختلفة. وهذا يعني أن كل عمود يمكن أن يحتوي على نوع بيانات مختلف عن العمود الآخر في DataFrame.
على سبيل المثال، يمكن أن يحتوي عمود واحد على قيم عددية عائمة (float) في حين يحتوي العمود الآخر على سلسلة نصوص (string)، وهذا يعني أن الأعمدة لديها أنواع بيانات مختلفة.
هذه المشكلة قد تحدث عند إنشاء DataFrame باستخدام قاموس، حيث يمكن أن يحتوي القاموس على بيانات من أنواع مختلفة.
لحل هذه المشكلة، يمكن استخدام الدالة astype() لتحويل نوع البيانات لكل عمود في DataFrame إلى نوع بيانات محدد. على سبيل المثال، يمكن استخدام df['column_name'].astype('float') لتحويل القيم في العمود 'column_name' إلى قيم عددية عائمة.
In [11]: df2.dtypes Out[11]:
A
B
C
D
E
F
dtype: object
تم استخدام الأمر df2.dtypes لعرض نوع بيانات كل عمود في DataFrame df2. ويتم عرض الأنواع الفعلية لكل عمود، والتي يتم تمثيلها باستخدام كائن dtype في pandas.
في هذا السياق، يمكن ملاحظة أن الأعمدة في DataFrame df2 لها الأنواع التالية:
'A': عدد عائم (float64).
'B': التاريخ والوقت (datetime64[ns]).
'C': عدد عائم (float32).
'D': عدد صحيح (int32).
'E': قيم مصنفة (category).
'F': سلسلة نصوص (object).
يمكن استخدام dtypes لفحص أنواع البيانات في DataFrame والتحقق من أنها تمثل الأنواع المناسبة للبيانات المخزنة في العمود. كما يمكن استخدامها أيضًا لتحويل نوع البيانات لكل عمود إلى نوع بيانات محدد باستخدام astype()، كما ذكرنا في الإجابة السابقة.
If you’re using IPython, tab completion for column names (as well as public attributes) is automatically enabled. Here’s a subset of the attributes that will be completed:
(continues on next page)
In [12]: df2. # noqa: E225, E999 df2.A df2.bool df2.abs df2.boxplot df2.add df2.C df2.add_prefix df2.clip df2.add_suffix df2.columns
هذا الكود يستخدم في بيئة IPython ويستعرض الخصائص (Attributes) التي يمكن الوصول إليها من DataFrame df2 باستخدام التكملة التلقائية للعمود (Column) أو الخصائص العامة (Public Attributes).
عند كتابة df2. واستخدام مفتاح TAB، سيتم عرض قائمة من الخصائص التي يمكن الوصول إليها، بما في ذلك:
df2.A: العمود A في DataFrame df2.
df2.C: العمود C في DataFrame df2.
df2.add(): دالة لإضافة DataFrame أو سلسلة إلى DataFram
Creating a DataFrame by passing a NumPy array, with a datetime index and labeled columns:
In [5]: dates = pd.date_range('20130101', periods=6) In [6]: dates
الكود السابق يستخدم مكتبة pandas ومكتبة numpy في البيثون لإنشاء DataFrame يحتوي على مصفوفة NumPy بفهرس تاريخي وأعمدة مسماة.
يتم إنشاء مجموعة من التواريخ باستخدام الدالة pd.date_range والتي تولد سلسلة تاريخية مع تاريخ البدء يبدأ من '20130101' وتتضمن ستة فترات.
يتم إنشاء مصفوفة NumPy بأربعة عواميد وستة صفوف من القيم العشوائية باستخدام دالة np.random.randn(6, 4).
يتم إنشاء DataFrame بواسطة pd.DataFrame ويتم تمرير المصفوفة العشوائية كمدخل للبيانات ومجموعة التواريخ كفهرس وأسماء الأعمدة المحددة كمعلمات.
يتم طباعة الـ DataFrame باستخدام print.
يعطي الكود DataFrame مع ست صفوف وأربعة أعمدة، حيث يتم تمثيل المصفوفة العشوائية عبر الصفوف والأعمدة، ويتم تحديد كل عمود بأسمه، وتم تعيين التاريخ كفهرس.
حسنًا، يمكننا التحدث بشكل أكبر عن العناصر الأساسية لهذا الكود.
أولاً، يتم استيراد مكتبة pandas باستخدام import pandas as pd. يتم استخدام هذه المكتبة للعمل مع البيانات الموجودة في شكل DataFrame، والتي هي عبارة عن جدول يحتوي على صفوف وأعمدة.
ثم، يتم استيراد مكتبة NumPy باستخدام import numpy as np. تعد NumPy مكتبة أساسية في برمجة البيانات العلمية في Python، وتوفر هذه المكتبة أدوات للعمل مع المصفوفات والأرقام والصور والبيانات الأخرى.
بعد ذلك، يتم استخدام pd.date_range لإنشاء سلسلة تاريخية باستخدام القيمة '20130101' كتاريخ بداية، وباستخدام periods=6 لإنشاء 6 فترات تاريخية متتالية. تتميز سلسلة التاريخ بكونها فهرس للصفوف في DataFrame.
يتم إنشاء مصفوفة NumPy باستخدام np.random.randn(6, 4)، حيث يتم تمرير الأبعاد المطلوبة للمصفوفة (6 صفوف و 4 أعمدة)، والتي تحتوي على قيم عشوائية من توزيع طبيعي.
أخيرًا، يتم إنشاء DataFrame باستخدام pd.DataFrame، ويتم تمرير المصفوفة العشوائية كبيانات، ومجموعة التواريخ كفهرس، وأسماء الأعمدة المحددة كمعلمات.
يتم طباعة DataFrame باستخدام print(df)، حيث يتم عرض DataFrame في شكل جدول يحتوي على الصفوف والأعمدة والقيم. يمكن استخدام DataFrame في العديد من العمليات الأخرى في برمجة البيانات، مثل الحسابات الإحصائية والرسوم البيانية والتحويلات الأخرى.
الصيغة الأساسية للكود هي كالتالي:
import pandas as pd
import numpy as np
# Create a date range
dates = pd.date_range('20130101', periods=6)
# Create a random numpy array
data = np.random.randn(6, 4)
# Create a DataFrame with dates as the index
df = pd.DataFrame(data, index=dates, columns=['A', 'B', 'C', 'D'])
# Print the DataFrame
print(df)
هذا الكود ينشئ DataFrame عشوائي باستخدام NumPy ويستخدم pandas لإنشاء فهرس تاريخي. يتم طباعة DataFrame باستخدام print(df)، والذي يعرض DataFrame في شكل جدول يحتوي على الصفوف والأعمدة والقيم. يمكن استخدام DataFrame في العديد من العمليات الأخرى في برمجة البيانات، مثل الحسابات الإحصائية والرسوم البيانية والتحويلات الأخرى.
هذه النتيجة هي فهرس تاريخي للصفوف في DataFrame الذي تم إنشاؤه في الكود الذي تم توفيره. تحتوي هذه الفهرسة على مجموعة من التواريخ الزمنية المتتالية والتي تم إنشاؤها باستخدام الدالة pd.date_range().
تعني 'datetime64[ns]' أن تنسيق الفهرس الزمني هو datetime64 وأن الدقة الزمنية للفهرس هي النانو ثانية [ns]، وهو أحد أنواع البيانات في pandas لتمثيل التواريخ والأوقات.
أما بالنسبة لـ freq، فهي تحديد التكرار الزمني (التردد) للتواريخ في الفهرس الزمني، والتي تم تعيينها في هذا الكود على D وتعني "يوميًا"، مما يعني أن التواريخ في الفهرس الزمني تم إنشاؤها بتردد يومي. يمكن تعيين ترددات زمنية مختلفة، مثل الأسبوعية W أو الشهرية M أو السنوية Y.
هذا الكود يقوم بإنشاء DataFrame عشوائي آخر، ولكنه يستخدم معلومات الفهرس الزمني dates التي تم إنشاؤها في الكود السابق لتعيين فهرس زمني لصفوف DataFrame. يتم تعيين الأعمدة باستخدام list('ABCD')، مما يعني أن الأعمدة ستتم تسميتها "A" و "B" و "C" و "D" في الترتيب.
تم إنشاء DataFrame عشوائي آخر بحيث تم إنشاء قيم عشوائية باستخدام np.random.randn(6, 4) ، والتي تنتج مصفوفة ثنائية الأبعاد 6x4 عشوائية من الأرقام العائمة. يتم تعيين هذه المصفوفة كقيم DataFrame مستخدمًا df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
بعد ذلك، يتم طباعة هذا الـ DataFrame باستخدام print(df)، والذي يظهر DataFrame في شكل جدول. الصفوف هي التواريخ في الفهرس الزمني، والأعمدة هي A و B و C و D. يتم إظهار القيم في خلايا الجدول، والتي تم إنشاؤها بشكل عشوائي باستخدام np.random.randn().
Creating a DataFrame by passing a dict of objects that can be converted to series-like.
In [9]: df2 = pd.DataFrame({'A': 1.,
...: 'B': pd.Timestamp('20130102'),
...: 'C': pd.Series(1, index=list(range(4)), dtype='float32'),
...: 'D': np.array([3] * 4, dtype='int32'),
...: 'E': pd.Categorical(["test", "train", "test", "train"]),
...: 'F': 'foo'}) ...:
In [10]: df2 Out[10]:
ABCDEF 0 1.0 2013-01-02 1.0 3 test foo 1 1.0 2013-01-02 1.0 3 train foo 2 1.0 2013-01-02 1.0 3 test foo 3 1.0 2013-01-02 1.0 3 train foo
هذا الكود ينشئ DataFrame آخر باستخدام قاموس Python كمدخل. يتم تعيين الأعمدة باستخدام المفاتيح في القاموس: "A" و "B" و "C" و "D" و "E" و "F". يتم تعيين قيم الأعمدة بالترتيب:
العمود "A" يتم تعيين قيمه باستخدام الرقم 1.0.
العمود "B" يتم تعيين قيمه باستخدام pd.Timestamp('20130102')، وهو كائن تاريخ ووقت من pandas يمثل الوقت 2013-01-02.
العمود "C" يتم تعيين قيمه باستخدام pd.Series(1, index=list(range(4)), dtype='float32')، وهو Series عشوائي يحتوي على الرقم 1.0 في جميع الصفوف.
العمود "D" يتم تعيين قيمه باستخدام np.array([3] * 4, dtype='int32')، وهو مصفوفة NumPy تحتوي على الرقم 3 في جميع الصفوف.
العمود "E" يتم تعيين قيمه باستخدام pd.Categorical(["test", "train", "test", "train"])، وهو عامل تصنيفي من pandas يحتوي على القيم "test" و "train".
العمود "F" يتم تعيين قيمه باستخدام النص "foo"، والذي يتم تكراره في جميع الصفوف.
بعد ذلك، يتم طباعة هذا الـ DataFrame باستخدام print(df2)، والذي يظهر DataFrame في شكل جدول. الصفوف هي المفاتيح في القاموس، والأعمدة هي A و B و C و D و E و F. يتم إظهار القيم في خلايا الجدول، والتي تم تعيينها باستخدام المفاتيح في القاموس.
التعريفات النوعية (dtypes) هي طريقة لوصف نوع البيانات المخزنة في DataFrame الخاص بك. تحدد التعريفات النوعية كيفية تخزين البيانات والعمليات التي يمكن تنفيذها عليها. يتم تعيين التعريفات النوعية تلقائيًا بناءً على القيم التي تم إدخالها في DataFrame، وقد تكون مختلفة بين الأعمدة.
في هذا المثال، يبين رسالة "The columns of the resulting DataFrame have different dtypes" أن التعريفات النوعية للأعمدة في DataFrame الذي تم إنشاؤه في الكود السابق مختلفة. على سبيل المثال، العمود "A" لديه تعريف نوع float64، بينما العمود "B" لديه تعريف نوع datetime64[ns]، والعمود "C" لديه تعريف نوع float32، والعمود "D" لديه تعريف نوع int32، والعمود "E" لديه تعريف نوع category، والعمود "F" لديه تعريف نوع object.
يمكن أن تتسبب التعريفات النوعية المختلفة في مشاكل في بعض العمليات، على سبيل المثال عند محاولة إجراء عملية حسابية على الأعمدة ذات التعريفات النوعية المختلفة. لذلك، يجب عليك التأكد من أن التعريفات النوعية للأعمدة في DataFrame الخاص بك متوافقة مع نوع البيانات الذي تعمل عليه.
The columns of the resulting DataFrame have different dtypes.
اشرح
In [11]: df2.dtypes Out[11]:
A
B
C
D
E
F
dtype: object
float64
datetime64[ns]
float32
int32
category
object
هذه الرسالة توضح تعريفات الأعمدة في DataFrame df2 التي تم إنشاؤه في الكود السابق باستخدام df2.dtypes. تتضمن التعريفات النوعية لكل عمود:
العمود "A" لديه تعريف نوع float64.
العمود "B" لديه تعريف نوع datetime64[ns].
العمود "C" لديه تعريف نوع float32.
العمود "D" لديه تعريف نوع int32.
العمود "E" لديه تعريف نوع category.
العمود "F" لديه تعريف نوع object.
يمكن استخدام هذه المعلومات للتأكد من أن التعريفات النوعية للأعمدة في DataFrame متوافقة مع العمليات التي تريد تنفيذها عليها، ويمكن أيضًا استخدامها لتحويل التعريفات النوعية إذا كان ذلك ضروريًا.
If you’re using IPython, tab completion for column names (as well as public attributes) is automatically enabled. Here’s a subset of the attributes that will be completed:
Here’s a subset of the attributes that will be completed:
(continues on next page)
In [12]: df2. # noqa: E225, E999 df2.A df2.bool df2.abs df2.boxplot df2.add df2.C df2.add_prefix df2.clip df2.add_suffix df2.columns
هذه الرسالة تظهر بعض الخيارات المتاحة لـ DataFrame df2 عند استخدام النقطة والضغط على مفتاح الـ Tab في بيئة Jupyter Notebook أو IPython.
df2.A: العمود "A" في DataFrame df2.
df2.bool: تحويل قيم DataFrame إلى قيم منطقية (True / False).
df2.abs(): قيم المطلقة لجميع القيم في DataFrame df2.
df2.boxplot(): رسم مربع اللحية (boxplot) لجميع الأعمدة العددية في DataFrame df2.
df2.add(): إضافة DataFrame آخر أو سلسلة إلى DataFrame df2.
df2.C: العمود "C" في DataFrame df2.
df2.add_prefix(): إضافة بادئة محددة إلى أسماء الأعمدة في DataFrame df2.
df2.clip(): قص القيم في DataFrame df2 إلى الحد الأدنى والأقصى المحدد.
df2.add_suffix(): إضافة لاحقة محددة إلى أسماء الأعمدة في DataFrame df2.
df2.columns: أسماء الأعمدة في DataFrame df2.
هذه ليست كل الخيارات المتاحة، ولكنها تمثل مجموعة متنوعة من الخيارات التي يمكن استخدامها في DataFrame df2 باستخدام النقطة والضغط على مفتاح الـ Tab.
2.1.2 Viewing data
See the Basics section.
Here is how to view the top and bottom rows of the frame:
هذا الكود يستخدم DataFrame df الذي تم إنشاؤه في وقت سابق.
df.head() يظهر أول 5 صفوف في DataFrame df، والتي تحتوي على الأعمدة A و B و C و D. يتم طباعة الصفوف باستخدام الأرقام 0 إلى 4 كمفاتيح، ويتم عرض القيم في خلايا الجدول.
df.tail(3) يظهر آخر 3 صفوف في DataFrame df، والتي تحتوي على الأعمدة A و B و C و D. يتم طباعة الصفوف باستخدام المفاتيح 3 إلى 5، ويتم عرض القيم في خلايا الجدول.
يمكن استخدام هذه المعلومات لفهم بصورة أفضل كيفية تنظيم DataFrame الخاص بك، وللتحقق من القيم الموجودة في DataFrame الخاص بك.
هذا الكود يستخدم DataFrame df الذي تم إنشاؤه في وقت سابق.
df.index يعرض فهرس الصفوف في DataFrame df، والذي يتمثل في DateTimeIndex. يتم عرض الفهرس باستخدام تعريف النوع المحدد، وهو datetime64[ns]، ويتم تحديد التردد (freq) كل يوم (D).
df.columns يعرض أسماء الأعمدة في DataFrame df، والتي هي 'A' و 'B' و 'C' و 'D'. يتم عرض أسماء الأعمدة باستخدام تعريف النوع المحدد، وهو object.
يمكن استخدام هذه المعلومات لفهم بصورة أفضل كيفية تنظيم DataFrame الخاص بك، وللتحقق من الفهرس وأسماء الأعمدة المستخدمة في DataFrame الخاص بك.
DataFrame.to_numpy() gives a NumPy representation of the underlying data. Note that this can be an expensive operation when your DataFrame has columns with different data types, which comes down to a fundamental differ- ence between pandas and NumPy: NumPy arrays have one dtype for the entire array, while pandas DataFrames have one dtype per column. When you call DataFrame.to_numpy(), pandas will find the NumPy dtype that can hold all of the dtypes in the DataFrame. This may end up being object, which requires casting every value to a Python object.
For df, our DataFrame of all floating-point values, DataFrame.to_numpy() is fast and doesn’t require copying data.
هذا النص يوضح كيفية عمل DataFrame.to_numpy() في pandas وكيفية تأثير تنوع أنواع بيانات الأعمدة في أداء هذه العملية.
عند استخدام DataFrame.to_numpy()، يتم تحويل DataFrame إلى مصفوفة NumPy. ومع ذلك، يمكن أن تكون هذه العملية مكلفة في حالة وجود أعمدة في DataFrame لديها أنواع بيانات مختلفة. ويعود ذلك إلى الاختلاف الأساسي بين pandas و NumPy، حيث تحتوي مصفوفات NumPy على نوع بيانات واحد للمصفوفة بأكملها، بينما تحتوي DataFrame في pandas على نوع بيانات واحد لكل عمود. عند استخدام DataFrame.to_numpy()، يبحث pandas عن النوع الأنسب في NumPy الذي يمكن أن يحتوي على جميع أنواع البيانات في DataFrame. ويمكن أن يكون النوع الأنسب object، والذي يتطلب تحويل كل قيمة إلى كائن Python.
في حالة DataFrame df الذي يحتوي على قيم عائمة فقط، فإن DataFrame.to_numpy() سريع ولا يتطلب نسخ البيانات. يمكن استخدام هذه المعلومات لفهم أداء DataFrame.to_numpy() في pandas وكيفية تأثير تنوع أنواع بيانات الأعمدة في هذه العملية.
هذا الكود يستخدم DataFrame df الذي تم إنشاؤه في وقت سابق.
df.to_numpy() يحول DataFrame df إلى مصفوفة NumPy. يتم تحويل كل قيمة في DataFrame إلى قيمة NumPy الخاصة بها، ويتم تخزين هذه القيم في مصفوفة NumPy متعددة الأبعاد. يمكن استخدام هذه المصفوفة لتطبيق العديد من عمليات NumPy عليها، مثل الحسابات الرياضية والعمليات الإحصائية.
يمكن استخدام هذه المعلومات لفهم كيفية تحويل DataFrame إلى مصفوفة NumPy في pandas، وكيف يمكن استخدام هذه المصفوفة لتطبيق العديد من العمليات الرياضية والإحصائية المدعومة في NumPy.
هذا الكود يستخدم DataFrame df2 الذي تم إنشاؤه في وقت سابق.
df2.to_numpy() يحول DataFrame df2 إلى مصفوفة NumPy. ومع ذلك، يتم تحديد نوع بيانات الخرج بـ dtype=object بدلاً من استخدام نوع بيانات عائم، حيث يتم دمج أنواع البيانات المختلفة في DataFrame في نوع بيانات واحد object. يتم تحويل كل قيمة في DataFrame إلى قيمة NumPy الخاصة بها، ويتم تخزين هذه القيم في مصفوفة NumPy متعددة الأبعاد. ويمكن ملاحظة أن القيم في المصفوفة الناتجة لا تحتوي على أي قيم عائمة، نظرًا لأن NaN ليست قيمة مقبولة في NumPy.
يمكن استخدام هذه المعلومات لفهم كيفية تحويل DataFrame إلى مصفوفة NumPy في pandas، وكيف يتعامل NumPy مع أنواع البيانات المختلفة في DataFrame. ومن المهم ملاحظة أن استخدام dtype=object في الخرج يمكن أن يؤدي إلى تأثير سلبي على أداء العمليات الرياضية والإحصائية في NumPy.
هذه العبارة تشير إلى أن دالة DataFrame.to_numpy() في pandas لا تشمل فهرس الصفوف وأسماء الأعمدة في المخرجات.
عند استخدام DataFrame.to_numpy()، يتم تحويل DataFrame إلى مصفوفة NumPy. ومع ذلك، فإن الفهرس الخاص بالصفوف في DataFrame وأسماء الأعمدة لا تدخل في المصفوفة الناتجة. يتم حذف هذه المعلومات من المخرجات لتحقيق التوافق مع تعريف مصفوفات NumPy التي تحتوي على بيانات فقط ولا تشمل أي معلومات إضافية.
يمكن استخدام هذه المعلومات لفهم ما يتم تضمينه وما لا يتم تضمينه في المخرجات عند استخدام DataFrame.to_numpy() في pandas. إذا كان من الضروري تضمين فهرس الصفوف وأسماء الأعمدة في المخرجات، يمكن استخدام خيارات أخرى في pandas مثل to_dict() لتحويل DataFrame إلى قاموس Python.
19]: df.describe()
هذا الكود يقوم بإنشاء ملخص إحصائي للبيانات في DataFrame df باستخدام الدالة describe() في pandas.
يتم إنشاء ملخص إحصائي يشمل المقاييس الإحصائية الأساسية مثل:
العدد الإجمالي للصفوف
المتوسط الحسابي (المتوسط) للصفوف
الانحراف المعياري (standard deviation)
الحد الأدنى (minimum)
الربع الأول (25%)
الوسط (median)
الربع الثالث (75%)
الحد الأعلى (maximum)
يتم إنشاء هذا الملخص لكل عمود في DataFrame التي يحتوي على بيانات رقمية. ويمكن استخدام هذه المعلومات لفهم توزيع البيانات ومستوى التغير في البيانات في DataFrame.
من بين البيانات المدرجة في الملخص الإحصائي هي المتوسط الحسابي والانحراف المعياري، والتي يمكن استخدامها لتحديد مدى تشتت البيانات، وإذا كانت بياناتها متجانسة أو لا.
Can you show me an example of how to use the describe() function?
بالتأكيد! إليك مثال على كيفية استخدام دالة describe() في pandas:
لنفترض أن لدينا DataFrame يحتوي على بيانات متعلقة بمجموعة من الطلاب، ويتكون من الأعمدة التالية: "الاسم"، "العمر"، "الطول" و "الوزن".
لتطبيق دالة describe() على هذا البيانات، يمكن استخدام الكود التالي:
import pandas as pd
# create a sample dataframe
data = {"Name": ["John", "Jane", "Bob", "Alice", "Mike"],
"Age": [21, 23, 20, 22, 21],
"Height": [175, 168, 182, 170, 180],
"Weight": [70, 65, 80, 60, 75]}
df = pd.DataFrame(data)
# use describe() function on the dataframe
df.describe()
سينتج عن هذا الكود ملخص إحصائي للبيانات في DataFrame df، والذي يمكن الاطلاع عليه عن طريق طباعته. يتضمن هذا الملخص الإحصائي المقاييس الأساسية لكل عمود في DataFrame، بما في ذلك العدد الإجمالي للصفوف، المتوسط الحسابي، الانحراف المعياري، الحد الأدنى، الربع الأول، الوسط، الربع الثالث، والحد الأعلى.
يمكن تخصيص الإخراج من الدالة describe() باستخدام خيارات مختلفة، مثل تضمين بيانات غير عددية، وتغيير الدقة العددية، وتخصيص الاحتمالات المستخدمة في حساب الربع.
بالتأكيد! إليك مثال على كيفية استخدام دالة describe() في pandas:
لنفترض أن لدينا DataFrame يحتوي على بيانات متعلقة بمجموعة من الطلاب، ويتكون من الأعمدة التالية: "الاسم"، "العمر"، "الطول" و "الوزن".
لتطبيق دالة describe() على هذا البيانات، يمكن استخدام الكود التالي:
import pandas as pd
# create a sample dataframe
data = {"Name": ["John", "Jane", "Bob", "Alice", "Mike"],
"Age": [21, 23, 20, 22, 21],
"Height": [175, 168, 182, 170, 180],
"Weight": [70, 65, 80, 60, 75]}
df = pd.DataFrame(data)
# use describe() function on the dataframe
df.describe()
سينتج عن هذا الكود ملخص إحصائي للبيانات في DataFrame df، والذي يمكن الاطلاع عليه عن طريق طباعته. يتضمن هذا الملخص الإحصائي المقاييس الأساسية لكل عمود في DataFrame، بما في ذلك العدد الإجمالي للصفوف، المتوسط الحسابي، الانحراف المعياري، الحد الأدنى، الربع الأول، الوسط، الربع الثالث، والحد الأعلى.
يمكن تخصيص الإخراج من الدالة describe() باستخدام خيارات مختلفة، مثل تضمين بيانات غير عددية، وتغيير الدقة العددية، وتخصيص الاحتمالات المستخدمة في حساب الربع.
20]: df.T Out[20]:
2013-01-01 2013-01-02 2013-01-03 2013-01-04 2013-01-05 2013-01-06
A 0.284713
B 0.778963
C -0.462652
D 2.000377
1.060129
0.051743
1.810738
-1.496037
-1.121445
1.808866
-1.110269
0.456507
1.226944
-1.359582
-0.648583
-0.055771
-0.994286
-0.045295
-2.737315
-1.152376
-0.908677
-1.577695
-0.203300
0.705411
هذا الكود يستخدم DataFrame df لإنشاء DataFrame جديدة تمثل النسخة المعكوسة (transpose) لـ df باستخدام الدالة T في pandas.
عند استخدام df.T، يتم إنشاء DataFrame جديدة تمثل نفس البيانات في df، ولكن تم تغيير ترتيب الصفوف والأعمدة، حيث تصبح الأعمدة هي الصفوف والصفوف هي الأعمدة. يتم تغيير هذا الترتيب بحيث يكون المحور الأفقي يمثل العناوين الرئيسية للصفوف (الأسماء الرئيسية للأعمدة في DataFrame الأصلي)، والمحور العمودي يمثل العناصر المختلفة في الصفوف.
ويظهر في المثال أعلاه DataFrame جديدة بعد تطبيق df.T. يتكون هذا النموذج الجديد من 6 صفوف و 4 أعمدة، حيث يتمثل كل صف في الأعمدة الأصلية لـ df، وكل عمود يتمثل في الصفوف الأصلية لـ df. يمكن استخدام هذا DataFrame المعكوس لتحليل البيانات بشكل مختلف أو لإجراء عمليات معينة على البيانات.
يمكن الوصول إلى الصفوف والأعمدة في DataFrame المعكوس باستخدام معامل الفهرسة المستخدم في pandas. على سبيل المثال، يمكن الوصول إلى الصف الأول (الذي يمثل الأعمدة الأصلية A) باستخدام df.T.loc['A'].
Can you explain how to access a specific column in the transposed DataFrame?
بالتأكيد! يمكن الوصول إلى عمود محدد في DataFrame المعكوس باستخدام معامل الفهرسة المستخدم في pandas.
على سبيل المثال، إذا كنت تريد الوصول إلى العمود الثاني (الذي يمثل الصفوف الأصلية B) في DataFrame المعكوس، يمكن استخدام df.T[1] أو df.T['B']. وسيتم إرجاع Series تمثل هذا العمود.
يمكن أيضًا الوصول إلى الصفوف بنفس الطريقة. على سبيل المثال، يمكن الوصول إلى الصف الثاني (الذي يمثل الأعمدة الأصلية 1.060129) باستخدام df.T.loc['1.060129']. يمكن استخدام معامل الفهرسة في pandas للوصول إلى أي صف أو عمود في DataFrame المعكوس.
df.sort_index(axis=1, ascending=False)
هذا الكود يستخدم DataFrame df لإعادة ترتيب أعمدته باستخدام الدالة sort_index() في pandas.
تستخدم الدالة sort_index() لإعادة ترتيب الصفوف أو الأعمدة في DataFrame بناءً على الفهرس المستخدم. في هذا المثال، يتم تمرير معامل axis=1 لإرجاع DataFrame معين بترتيب الأعمدة، و ascending=False لترتيب الأعمدة بترتيب تنازلي.
وبذلك، يتم إنشاء DataFrame جديدة تمثل نفس بيانات df، ولكن تم تغيير ترتيب الأعمدة بحيث يتم ترتيبها بترتيب تنازلي. يمكن استخدام هذا الترتيب الجديد لتحليل البيانات بشكل مختلف أو لإجراء عمليات معينة على البيانات.
يمكن الوصول إلى الصفوف والأعمدة في DataFrame الجديدة باستخدام معامل الفهرسة المستخدم في pandas، وستكون الأعمدة مرتبة بترتيب تنازلي حسب الفهرس المستخدم. على سبيل المثال، يمكن الوصول إلى الأعمدة الأولى باستخدام df_sorted.iloc[:, 0]، والتي تحتوي على البيانات المرتبة في ترتيب تنازلي.
22]: df.sort_values(by='B')
هذا الكود يستخدم DataFrame df لإعادة ترتيب الصفوف بناءً على قيمة عمود معين باستخدام الدالة sort_values() في pandas.
تستخدم الدالة sort_values() لإعادة ترتيب الصفوف في DataFrame بناءً على قيمة عمود معين. في هذا المثال، يتم تمرير معامل by='B' لتحديد العمود الذي يتم الاستناد إليه لإعادة ترتيب الصفوف، والذي يمثل عمود B في DataFrame df.
وبذلك، يتم إنشاء DataFrame جديدة تمثل نفس بيانات df، ولكن تم تغيير ترتيب الصفوف بحيث يتم ترتيبها بناءً على قيم العمود B. يمكن استخدام هذا الترتيب الجديد لتحليل البيانات بشكل مختلف أو لإجراء عمليات معينة على البيانات.
يمكن الوصول إلى الصفوف والأعمدة في DataFrame الجديدة باستخدام معامل الفهرسة المستخدم في pandas، وستكون الصفوف مرتبة بترتيب يتم تحديده بناءً على قيم العمود B. على سبيل المثال، يمكن الوصول إلى الصف الأول (الذي يمثل البيانات المرتبة بأقل قيمة في العمود B) باستخدام df_sorted.iloc[0, :].
Note: While standard Python / Numpy expressions for selecting and setting are intuitive and come in handy for interactive work, for production code, we recommend the optimized pandas data access methods, .at, .iat, .loc and .iloc.
هذه ملاحظة في الوثائق الخاصة بـ pandas تشير إلى أنه على الرغم من أن التعبيرات القياسية في Python / Numpy للاختيار والتعيين تبدو بديهية وتأتي بمزايا في العمل التفاعلي، إلا أنها غير مثلى للعمليات الإنتاجية. وبالتالي، يتم توصية باستخدام طرق الوصول إلى البيانات المحسنة في pandas والتي تشمل الدوال التالية:
.at[]: يستخدم للوصول إلى العنصر في DataFrame بناءً على الفهرس المستخدم.
.iat[]: يستخدم للوصول إلى العنصر في DataFrame بناءً على الفهرس الصحيح (integer-based) المستخدم.
.loc[]: يستخدم للاختيار والتعيين بناءً على الفهرس المستخدم.
.iloc[]: يستخدم للاختيار والتعيين بناءً على الفهرس الصحيح (integer-based) المستخدم.
تتميز هذه الدوال بأداء أفضل وفعالية أكبر عند التعامل مع بيانات pandas الكبيرة، ويمكن استخدامها بنفس الطريقة القياسية المستخدمة في Python / Numpy. لذلك، يتم توصية باستخدام هذه الدوال في الكود الإنتاجي للحصول على أداء محسن وتحسين كفاءة العمليات.
مثال على استخدام .at[]:
import pandas as pd
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)
# الوصول إلى العنصر في الموضع (0, 'A')
value = df.at[0, 'A']
print(value)
# تعيين العنصر في الموضع (0, 'A') إلى قيمة مختلفة
df.at[0, 'A'] = 10
print(df)
مثال على استخدام .iloc[]:
import pandas as pd
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)
# الوصول إلى العنصر في الموضع الأول (0, 0)
value = df.iloc[0, 0]
print(value)
# تحديد الصفوف والأعمدة المحددة بالفهرس الصحيح
subset = df.iloc[0:2, 1:]
print(subset)
مثال على استخدام .loc[]:
import pandas as pd
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)
# الوصول إلى العنصر في الموضع (0, 'A')
value = df.loc[0, 'A']
print(value)
# تحديد الصفوف والأعمدة المحددة بالفهرس العام
subset = df.loc[df['A'] > 1, ['A', 'B']]
print(subset)
مثال على استخدام .iat[]:
import pandas as pd
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)
# الوصول إلى العنصر في الموضع الأول (0, 0)
value = df.iat[0, 0]
print(value)
# تعيين العنصر في الموضع الثاني (1, 1) إلى قيمة مختلفة
df.iat[1, 1] = 20
print(df)
Getting
Selecting a single column, which yields a Series, equivalent to df.A:
In [23]: df['A'] Out[23]:
2013-01-01
2013-01-02
2013-01-03
2013-01-04
2013-01-05
2013-01-06
Freq: D, Name: A, dtype: float64
0.284713
1.060129
-1.121445
1.226944
هذا الكود يستخدم DataFrame df لاسترداد قيم العمود الفردي "A"، والذي يتم استرجاعه كـ Series في pandas.
يمكن استرداد قيم العمود الفردي في DataFrame باستخدام المعامل [] وتحديد اسم العمود الذي يتم الاسترجاع. في هذا المثال، يتم استرداد قيم العمود "A" باستخدام df['A'].
وبذلك، يتم إنشاء Series جديدة تحتوي على قيم العمود "A" في DataFrame df. يمكن الوصول إلى القيم في هذه الـ Series باستخدام معامل الفهرسة المستخدم في pandas. على سبيل المثال، يمكن الوصول إلى القيمة الأولى باستخدام df['A'][0]، والتي تحتوي على القيمة في الموضع الأول في العمود "A" في DataFrame.
وتجدر الإشارة إلى أن الـ Series التي يتم استردادها تتضمن فهرسًا (index) يمكن استخدامه للوصول إلى القيم بشكل محدد، وفي هذا المثال، يتم استخدام فهرس يتم تسميته باسم "2013-01-01" إلى "2013-01-06".
هذا الكود يستخدم DataFrame df لاسترداد صفوف من DataFrame بناءً على فهرس الصف أو بناءً على الفهرس الزمني.
يمكن استرداد صفوف من DataFrame باستخدام المعامل [] وتحديد نطاق الصفوف المطلوب استردادها. في هذا المثال، يتم استرداد الصفوف من 0 إلى 3 باستخدام df[0:3]. يتم استخدام المؤشرات العددية لتحديد النطاق، والذي يتم تحديده كـ من 0 إلى 2، ويتم استرداد الصفوف الأول ، الثاني والثالث في DataFrame df.
وبذلك، يتم إنشاء DataFrame جديدة تتضمن الصفوف المحددة. يمكن الوصول إلى الصفوف والأعمدة في هذه الـ DataFrame باستخدام معامل الفهرسة المستخدم في pandas.
يمكن استرداد صفوف DataFrame بناءً على الفهرس الزمني باستخدام المعامل [] وتحديد الفاصل الزمني الذي يتم الاسترجاع في نطاق التواريخ. في هذا المثال، يتم استرداد الصفوف التي تتراوح بين "2013-01-02" و "2013-01-04" باستخدام df['20130102':'20130104']. يتم استخدام فهرس الفاصل الزمني لتحديد النطاق، والذي يتم استرجاع الصفوف المحددة في DataFrame.
وبذلك، يتم إنشاء DataFrame جديدة تتضمن الصفوف المحددة. يمكن الوصول إلى الصفوف والأعمدة في هذه الـ DataFrame باستخدام معامل الفهرسة المستخدم في pandas.
Selection by label
See more in Selection by Label.
For getting a cross section using a label:
In [26]: df.loc[dates[0]]
يتم استخدام هذا الكود لاسترداد الصف الذي يتوافق مع تاريخ dates[0] في DataFrame df في pandas.
يتم استخدام .loc[] للاختيار بناءً على الفهرس، وفي هذا المثال، يتم استخدام تاريخ dates[0] كفهرس للاختيار باستخدام df.loc[dates[0]].
وفي هذه الحالة، يتم استرداد الصف الذي يتوافق مع التاريخ dates[0] في DataFrame، والذي يشير إلى الصف الأول في DataFrame df. وبذلك، يتم إنشاء Series جديدة تحتوي على قيم الصف المحدد في DataFrame df. يمكن الوصول إلى القيم في هذه الـ Series باستخدام معامل الفهرسة المستخدم في pandas. على سبيل المثال، يمكن الوصول إلى القيمة الأولى باستخدام df.loc[dates[0]][0]، والتي تحتوي على القيمة في الموضع الأول في الصف الأول في DataFrame.
وتجدر الإشارة إلى أنه إذا تم استخدام فهرس زمني في DataFrame، يتم استخدام تاريخ الفهرس كمفتاح للاختيار.
What is the difference between .loc[] and .iloc[]?
.loc[] و .iloc[] هما اثنان من المعاملات الأساسية في pandas وهما يستخدمان لتحديد صفوف وأعمدة محددة في DataFrame. ولكن هناك فرق بينهما في الطريقة التي يتم بها تحديد الصفوف والأعمدة.
.loc[] يتم استخدامه للاختيار بناءً على الفهرس، ويتم تحديد الصفوف والأعمدة باستخدام الفهرس الموجود في DataFrame. يمكن استخدام الفهرس العام أو الفهرس الزمني (إذا كان متاحًا) لتحديد الصفوف والأعمدة. على سبيل المثال، يمكن استخدام .loc[] لتحديد الصف في DataFrame باستخدام الفهرس الزمني، كما في هذا المثال:
df.loc['2022-01-01']
يتم استخدام .iloc[] للاختيار بناءً على المؤشرات العددية، ويتم تحديد الصفوف والأعمدة باستخدام المؤشرات العددية للصفوف والأعمدة في DataFrame. يمكن استخدام .iloc[] لتحديد الصف في DataFrame باستخدام المؤشر العددي، كما في هذا المثال:
df.iloc[0]
وبالتالي فإن الفرق الرئيسي بين .loc[] و .iloc[] يكمن في طريقة تحديد الصفوف والأعمدة. علاوة على ذلك، يمكن استخدام .loc[] للتحديد باستخدام الفهرس الزمني (إذا كان متاحًا)، بينما لا يمكن استخدام .iloc[] للتحديد باستخدام الفهرس الزمني.
df.loc[:, ['A', 'B']]
يتم استخدام هذا الكود للاختيار للصفوف والأعمدة المحددة في DataFrame df في pandas.
.loc[] يستخدم للاختيار بناءً على الفهرس، وفي هذا المثال، يتم استخدام : لتحديد كافة الصفوف وتحديد الأعمدة "A" و "B" باستخدام ['A', 'B']. يتم تحديد الأعمدة المحددة عن طريق توفير قائمة من أسماء الأعمدة الرئيسية في DataFrame.
وبذلك، يتم إنشاء DataFrame جديدة تحتوي على الصفوف المحددة والأعمدة المحددة. يمكن الوصول إلى الصفوف والأعمدة في هذه الـ DataFrame باستخدام معامل الفهرسة المستخدم في pandas. كما يمكن عرض الـ DataFrame الجديد باستخدام print(df.loc[:, ['A', 'B']]).
df.loc['20130102':'20130104', ['A', 'B']]
يتم استخدام هذا الكود للاختيار للصفوف والأعمدة المحددة في DataFrame df في pandas، باستخدام الفهرس الزمني للاختيار.
.loc[] يستخدم للاختيار بناءً على الفهرس، وفي هذا المثال، يتم استخدام الفاصل الزمني "20130102" إلى "20130104" لتحديد الصفوف، وتحديد الأعمدة "A" و "B" باستخدام ['A', 'B']. يتم تحديد الأعمدة المحددة عن طريق توفير قائمة من أسماء الأعمدة الرئيسية في DataFrame.
وبذلك، يتم إنشاء DataFrame جديدة تحتوي على الصفوف المحددة والأعمدة المحددة. يمكن الوصول إلى الصفوف والأعمدة في هذه الـ DataFrame باستخدام معامل الفهرسة المستخدم في pandas. كما يمكن عرض الـ DataFrame الجديد باستخدام print(df.loc['20130102':'20130104', ['A', 'B']]).
وتجدر الإشارة إلى أنه عند استخدام الفهرس الزمني في DataFrame، يمكن استخدام تواريخ الفهرس كنقطة بداية ونقطة نهاية لتحديد الصفوف بينهما.
In [29]: df.loc['20130102', ['A', 'B']]
يتم استخدام هذا الكود للاختيار لقيمة محددة في DataFrame df في pandas، باستخدام الفهرس الزمني للاختيار.
.loc[] يستخدم للاختيار بناءً على الفهرس، وفي هذا المثال، يتم استخدام التاريخ dates[0] لتحديد الصف، وتحديد العمود "A". يتم تحديد العمود المحدد باستخدام اسم العمود الرئيسي في DataFrame.
وبذلك، يتم إنشاء قيمة جديدة تحتوي على القيمة المحددة في DataFrame df. يمكن الوصول إلى هذه القيمة باستخدام معامل الفهرسة المستخدم في pandas. يمكن عرض القيمة الجديدة باستخدام print(df.loc[dates[0], 'A']).
وتجدر الإشارة إلى أنه عند استخدام الفهرس الزمني في DataFrame، يمكن استخدام تاريخ الفهرس كنقطة لتحديد الصف.
df.at[dates[0], 'A']
يتم استخدام هذا الكود للاختيار لقيمة محددة في DataFrame df في pandas، باستخدام الفهرس الزمني للاختيار.
.at[] يستخدم للاختيار لقيمة واحدة فقط بناءً على الفهرس، وفي هذا المثال، يتم استخدام التاريخ dates[0] لتحديد الصف، وتحديد العمود "A". يتم تحديد العمود المحدد باستخدام اسم العمود الرئيسي في DataFrame.
وبذلك، يتم إنشاء قيمة جديدة تحتوي على القيمة المحددة في DataFrame df. يمكن الوصول إلى هذه القيمة باستخدام معامل الفهرسة المستخدم في pandas. يمكن عرض القيمة الجديدة باستخدام print(df.at[dates[0], 'A']).
يمكن استخدام .at[] عند الحاجة إلى الحصول على قيمة واحدة فقط في DataFrame، وهو أسرع من استخدام .loc[] عند الحاجة إلى الحصول على قيمة واحدة فقط.
وتجدر الإشارة إلى أنه عند استخدام الفهرس الزمني في DataFrame، يمكن استخدام تاريخ الفهرس كنقطة لتحديد الصف.
Object creation
Creating a Series by passing a list of values, letting pandas create a default integer index: In [3]: s = pd.Series([1, 3, 5, np.nan, 6, 8]) In [4]: s Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float64 اشرح الكود السابق
الكود السابق يقوم بإنشاء كائن Series في مكتبة Pandas باستخدام الدالة
pd.Series()
. يتم تمرير قائمة من القيم إلى الدالة وهي[1, 3, 5, np.nan, 6, 8]
، حيث يتم تعيين هذه القيم كقيم لكل عنصر في السلسلة.عندما لا يتم توفير فهرس للقيم في القائمة الممررة، يقوم Pandas تلقائيًا بإنشاء فهرس رقمي افتراضي يتم تعيينه لكل عنصر في السلسلة. وتظهر النتيجة في الشكل التالي:
حيث تم تعيين القيم الرقمية في العمود الأول بين 0 و 5 كفهرس لكل عنصر في السلسلة، وتم تعيين القيم الثانوية المماثلة في العمود الثاني. يمثل
NaN
القيمة التي لا يتم تعيينها، وهي تمثل "ليس رقمًا" وتستخدم لإشارة إلى القيم المفقودة أو الغير معروفة.يمكن إنشاء السلسلة المذكورة في السؤال باستخدام عدة صيغ مختلفة، وفيما يلي بعض الأمثلة:
1- استخدام قائمة من القيم المحددة:
2- استخدام قاموس Python:
3- استخدام قائمة من الأحرف كفهرس وقائمة من القيم كقيم لكل عنصر في السلسلة:
4- استخدام اسم دالة لتعيين القيم لكل عنصر في السلسلة:
يمكن استخدام الصيغ المذكورة أعلاه لإنشاء السلسلة بطرق مختلفة وفقًا لمتطلبات البرنامج.
تفضل بإلقاء نظرة على المثال التالي لإنشاء سلسلة باستخدام بعض الصيغ الأساسية المتاحة:
يتم إنشاء السلسلة في كل مثال باستخدام صيغة مختلفة، وذلك باستخدام القائمة، القاموس، القائمة مع فهرس مخصص، مصفوفة NumPy، وخطوة ثابتة (fixed step)، على التوالي.
Creating a DataFrame by passing a NumPy array, with a datetime index and labeled columns:
dates = pd.date_range('20130101', periods=6) In [6]: dates
الكود السابق يستخدم دالة
pd.date_range()
في مكتبة Pandas لإنشاء فهرس تاريخي باستخدام تاريخ بداية وعدد الفترات المطلوبة.في هذا المثال، يتم تعيين التاريخ الأولي باستخدام السلسلة
'20130101'
، ويتم تمرير عدد الفترات المطلوبة بواسطة الخيارperiods
الذي تم تعيينه هنا على 6. سيؤدي ذلك إلى إنشاء فهرس تاريخي يحتوي على 6 تواريخ، والتي تكون موزعة على فترة 6 أيام اعتبارًا من التاريخ الأولي الذي تم تعيينه. وسيتم تخزين هذه التواريخ في متغيرdates
.عند طباعة
dates
، سيتم عرض فهرس التواريخ، حيث يكون تنسيق الفهرس هو YYYY-MM-DD، كما يلي:يتم استخدام هذا الفهرس في العديد من عمليات مكتبة Pandas، مثل إنشاء DataFrame أو سلسلة تحتوي على قيم تاريخية مختلفة.
[6]: DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05', '2013-01-06'], dtype='datetime64[ns]', freq='D') In [7]: df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD')) In [8]: df Out[8]: ABCD 2013-01-01 0.284713 0.778963 -0.462652 2.000377 2013-01-02 1.060129 0.051743 1.810738 -1.496037 2013-01-03 -1.121445 1.808866 -1.110269 0.456507 2013-01-04 1.226944 -1.359582 -0.648583 -0.055771 2013-01-05 -0.994286 -0.045295 -2.737315 -1.152376 2013-01-06 -0.908677 -1.577695 -0.203300 0.705411
الكود يتضمن عملية إنشاء DataFrame باستخدام مصفوفة NumPy وفهرس datetime تم إنشاؤه في السطر السابق.
في السطر رقم 7، يتم إنشاء DataFrame باستخدام
pd.DataFrame()
، ويتم تمرير مصفوفةnp.random.randn(6, 4)
كقيم للبيانات، وفهرسdates
كفهرس الصفوف، وقائمة المسميات['A', 'B', 'C', 'D']
كأعمدة مسماة.عند طباعة DataFrame الناتج في السطر رقم 8، تظهر القيم الموجودة في كل خلية في الصفوف والأعمدة. تم استخدام حرف كلمة "list" لتحويل السلسلة
'ABCD'
إلى قائمة من المسميات الفردية للأعمدة. تلاحظ أن كل قيمة في الصفوف تم تعيينها بشكل عشوائي باستخدامnp.random.randn()
والتي تم إنشاؤها في DataFrame.تم تخزين DataFrame الناتج في متغير
df
.Creating a DataFrame by passing a dict of objects that can be converted to series-like
يتيح لنا استخدام القاموس (Dict) في مكتبة Pandas إنشاء DataFrame. يتم إنشاء DataFrame من خلال تمرير قاموس من الكائنات المماثلة لسلسلة Series-like.
يمكن تمثيل القاموس كزوج من القيم، حيث يتم استخدام المفتاح كاسم العمود وقيمة المفتاح تمثل البيانات في العمود. يمكن تمثيل القيم باستخدام مجموعة من الأنواع، بما في ذلك سلسلة، قائمة، مصفوفة NumPy، أو DataFrame آخر. يتم تحويل الكائنات الأخرى إلى Series قبل إنشاء DataFrame.
يمكن القيام بذلك بالتالي:
في هذا المثال، يتم إنشاء قاموس
data_dict
الذي يحتوي على 3 مفاتيحA
وB
وC
، وقيمهم هي قائمة[1, 2, 3]
وقائمة['a', 'b', 'c']
وسلسلة Series[0.1, 0.2, 0.3]
على التوالي.ثم يتم إنشاء DataFrame باستخدام
pd.DataFrame()
والذي يتم تمرير القاموسdata_dict
كمدخل. يتم تحويل القائمة والسلسلة إلى سلسلة Series قبل إنشاء DataFrame.أخيرًا، يتم طباعة DataFrame الناتج باستخدام
print()
.ستتم طباعة DataFrame الناتج التي يتم إنشاؤها في هذا المثال كالتالي:
يمكن ملاحظة أن اسماء الأعمدة تتوافق مع المفاتيح في القاموس والتي تم تمثيلها بأشكال مختلفة من البيانات، ولكنها تم تحويلها جميعًا إلى Series قبل إنشاء DataFrame.
أمثلة على إنشاء DataFrame باستخدام قاموس:
1- إنشاء DataFrame باستخدام قاموس مع سلسلات Series وقائمة:
ستتم طباعة DataFrame الناتج:
2- إنشاء DataFrame باستخدام قاموس مع قائمة ومصفوفة NumPy:
ستتم طباعة DataFrame الناتج:
3- إنشاء DataFrame باستخدام قاموس مع قائمة وقائمة وسلسلة Series:
ستتم طباعة DataFrame الناتج:
يمكن ملاحظة أن جميع الأمثلة تستخدم قاموس مع القيم المختلفة التي يمكن تحويلها إلى Series-like objects، وتم إنشاء DataFrame باستخدام
pd.DataFrame()
والذي يتم تمرير القاموس كمدخل.In [9]: df2 = pd.DataFrame({'A': 1., ...: 'B': pd.Timestamp('20130102'), ...: 'C': pd.Series(1, index=list(range(4)), dtype='float32'), ...: 'D': np.array([3] * 4, dtype='int32'), ...: 'E': pd.Categorical(["test", "train", "test", "train"]), ...: 'F': 'foo'}) ...: In [10]: df2 Out[10]: ABCDEF 0 1.0 2013-01-02 1.0 3 test foo 1 1.0 2013-01-02 1.0 3 train foo 2 1.0 2013-01-02 1.0 3 test foo 3 1.0 2013-01-02 1.0 3 train foo
يتضمن الكود إنشاء DataFrame جديد باستخدام قاموس يحتوي على مختلف أنواع البيانات.
في السطر 9، يتم إنشاء قاموس يحتوي على المفاتيح 'A' و 'B' و 'C' و 'D' و 'E' و 'F'، والتي تمثل كل من:
pd.Timestamp()
في '2013-01-02'.ثم يتم إنشاء DataFrame الجديد باستخدام
pd.DataFrame()
، والذي يتم تمرير القاموس الذي تم إنشاؤه في السطر 9 كمدخل.أخيرًا، يتم طباعة DataFrame الناتج في السطر 10 باستخدام
print()
.ستتم طباعة DataFrame الناتج في هذا المثال كالتالي:
يمكن ملاحظة أن DataFrame الناتج يحتوي على الأعمدة 'A' و 'B' و 'C' و 'D' و 'E' و 'F' والتي تمثل كل من الأنواع المختلفة للبيانات الممثلة في القاموس.
The columns of the resulting DataFrame have different dtypes.
تعني هذه الجملة أن الأعمدة في DataFrame الناتج لها أنواع بيانات مختلفة. وهذا يعني أن كل عمود يمكن أن يحتوي على نوع بيانات مختلف عن العمود الآخر في DataFrame.
على سبيل المثال، يمكن أن يحتوي عمود واحد على قيم عددية عائمة (float) في حين يحتوي العمود الآخر على سلسلة نصوص (string)، وهذا يعني أن الأعمدة لديها أنواع بيانات مختلفة.
هذه المشكلة قد تحدث عند إنشاء DataFrame باستخدام قاموس، حيث يمكن أن يحتوي القاموس على بيانات من أنواع مختلفة.
لحل هذه المشكلة، يمكن استخدام الدالة
astype()
لتحويل نوع البيانات لكل عمود في DataFrame إلى نوع بيانات محدد. على سبيل المثال، يمكن استخدامdf['column_name'].astype('float')
لتحويل القيم في العمود 'column_name' إلى قيم عددية عائمة.In [11]: df2.dtypes Out[11]: A B C D E F dtype: object
تم استخدام الأمر
df2.dtypes
لعرض نوع بيانات كل عمود في DataFramedf2
. ويتم عرض الأنواع الفعلية لكل عمود، والتي يتم تمثيلها باستخدام كائن dtype في pandas.في هذا السياق، يمكن ملاحظة أن الأعمدة في DataFrame
df2
لها الأنواع التالية:يمكن استخدام
dtypes
لفحص أنواع البيانات في DataFrame والتحقق من أنها تمثل الأنواع المناسبة للبيانات المخزنة في العمود. كما يمكن استخدامها أيضًا لتحويل نوع البيانات لكل عمود إلى نوع بيانات محدد باستخدامastype()
، كما ذكرنا في الإجابة السابقة.If you’re using IPython, tab completion for column names (as well as public attributes) is automatically enabled. Here’s a subset of the attributes that will be completed: (continues on next page) In [12]: df2. # noqa: E225, E999 df2.A df2.bool df2.abs df2.boxplot df2.add df2.C df2.add_prefix df2.clip df2.add_suffix df2.columns
هذا الكود يستخدم في بيئة IPython ويستعرض الخصائص (Attributes) التي يمكن الوصول إليها من DataFrame
df2
باستخدام التكملة التلقائية للعمود (Column) أو الخصائص العامة (Public Attributes).عند كتابة
df2.
واستخدام مفتاح TAB، سيتم عرض قائمة من الخصائص التي يمكن الوصول إليها، بما في ذلك:df2.A
: العمودA
في DataFramedf2
.df2.C
: العمودC
في DataFramedf2
.df2.add()
: دالة لإضافة DataFrame أو سلسلة إلى DataFramCreating a DataFrame by passing a NumPy array, with a datetime index and labeled columns: In [5]: dates = pd.date_range('20130101', periods=6) In [6]: dates
الكود السابق يستخدم مكتبة pandas ومكتبة numpy في البيثون لإنشاء DataFrame يحتوي على مصفوفة NumPy بفهرس تاريخي وأعمدة مسماة.
يتم إنشاء مجموعة من التواريخ باستخدام الدالة
pd.date_range
والتي تولد سلسلة تاريخية مع تاريخ البدء يبدأ من '20130101' وتتضمن ستة فترات.يتم إنشاء مصفوفة NumPy بأربعة عواميد وستة صفوف من القيم العشوائية باستخدام دالة
np.random.randn(6, 4)
.يتم إنشاء DataFrame بواسطة
pd.DataFrame
ويتم تمرير المصفوفة العشوائية كمدخل للبيانات ومجموعة التواريخ كفهرس وأسماء الأعمدة المحددة كمعلمات.يتم طباعة الـ DataFrame باستخدام
print
.يعطي الكود DataFrame مع ست صفوف وأربعة أعمدة، حيث يتم تمثيل المصفوفة العشوائية عبر الصفوف والأعمدة، ويتم تحديد كل عمود بأسمه، وتم تعيين التاريخ كفهرس.
حسنًا، يمكننا التحدث بشكل أكبر عن العناصر الأساسية لهذا الكود.
أولاً، يتم استيراد مكتبة pandas باستخدام
import pandas as pd
. يتم استخدام هذه المكتبة للعمل مع البيانات الموجودة في شكل DataFrame، والتي هي عبارة عن جدول يحتوي على صفوف وأعمدة.ثم، يتم استيراد مكتبة NumPy باستخدام
import numpy as np
. تعد NumPy مكتبة أساسية في برمجة البيانات العلمية في Python، وتوفر هذه المكتبة أدوات للعمل مع المصفوفات والأرقام والصور والبيانات الأخرى.بعد ذلك، يتم استخدام
pd.date_range
لإنشاء سلسلة تاريخية باستخدام القيمة '20130101' كتاريخ بداية، وباستخدامperiods=6
لإنشاء 6 فترات تاريخية متتالية. تتميز سلسلة التاريخ بكونها فهرس للصفوف في DataFrame.يتم إنشاء مصفوفة NumPy باستخدام
np.random.randn(6, 4)
، حيث يتم تمرير الأبعاد المطلوبة للمصفوفة (6 صفوف و 4 أعمدة)، والتي تحتوي على قيم عشوائية من توزيع طبيعي.أخيرًا، يتم إنشاء DataFrame باستخدام
pd.DataFrame
، ويتم تمرير المصفوفة العشوائية كبيانات، ومجموعة التواريخ كفهرس، وأسماء الأعمدة المحددة كمعلمات.يتم طباعة DataFrame باستخدام
print(df)
، حيث يتم عرض DataFrame في شكل جدول يحتوي على الصفوف والأعمدة والقيم. يمكن استخدام DataFrame في العديد من العمليات الأخرى في برمجة البيانات، مثل الحسابات الإحصائية والرسوم البيانية والتحويلات الأخرى.الصيغة الأساسية للكود هي كالتالي:
هذا الكود ينشئ DataFrame عشوائي باستخدام NumPy ويستخدم pandas لإنشاء فهرس تاريخي. يتم طباعة DataFrame باستخدام
print(df)
، والذي يعرض DataFrame في شكل جدول يحتوي على الصفوف والأعمدة والقيم. يمكن استخدام DataFrame في العديد من العمليات الأخرى في برمجة البيانات، مثل الحسابات الإحصائية والرسوم البيانية والتحويلات الأخرى.Out[6]: DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05', '2013-01-06'], dtype='datetime64[ns]', freq='D')
هذه النتيجة هي فهرس تاريخي للصفوف في DataFrame الذي تم إنشاؤه في الكود الذي تم توفيره. تحتوي هذه الفهرسة على مجموعة من التواريخ الزمنية المتتالية والتي تم إنشاؤها باستخدام الدالة
pd.date_range()
.تعني
'datetime64[ns]'
أن تنسيق الفهرس الزمني هوdatetime64
وأن الدقة الزمنية للفهرس هي النانو ثانية[ns]
، وهو أحد أنواع البيانات في pandas لتمثيل التواريخ والأوقات.أما بالنسبة لـ
freq
، فهي تحديد التكرار الزمني (التردد) للتواريخ في الفهرس الزمني، والتي تم تعيينها في هذا الكود علىD
وتعني "يوميًا"، مما يعني أن التواريخ في الفهرس الزمني تم إنشاؤها بتردد يومي. يمكن تعيين ترددات زمنية مختلفة، مثل الأسبوعيةW
أو الشهريةM
أو السنويةY
.In [7]: df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD')) In [8]: df Out[8]: ABCD 2013-01-01 0.284713 0.778963 -0.462652 2.000377 2013-01-02 1.060129 0.051743 1.810738 -1.496037 2013-01-03 -1.121445 1.808866 -1.110269 0.456507 2013-01-04 1.226944 -1.359582 -0.648583 -0.055771 2013-01-05 -0.994286 -0.045295 -2.737315 -1.152376 2013-01-06 -0.908677 -1.577695 -0.203300 0.705411
هذا الكود يقوم بإنشاء DataFrame عشوائي آخر، ولكنه يستخدم معلومات الفهرس الزمني
dates
التي تم إنشاؤها في الكود السابق لتعيين فهرس زمني لصفوف DataFrame. يتم تعيين الأعمدة باستخدامlist('ABCD')
، مما يعني أن الأعمدة ستتم تسميتها "A" و "B" و "C" و "D" في الترتيب.تم إنشاء DataFrame عشوائي آخر بحيث تم إنشاء قيم عشوائية باستخدام
np.random.randn(6, 4)
، والتي تنتج مصفوفة ثنائية الأبعاد 6x4 عشوائية من الأرقام العائمة. يتم تعيين هذه المصفوفة كقيم DataFrame مستخدمًاdf = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
بعد ذلك، يتم طباعة هذا الـ DataFrame باستخدام
print(df)
، والذي يظهر DataFrame في شكل جدول. الصفوف هي التواريخ في الفهرس الزمني، والأعمدة هي A و B و C و D. يتم إظهار القيم في خلايا الجدول، والتي تم إنشاؤها بشكل عشوائي باستخدامnp.random.randn()
.Creating a DataFrame by passing a dict of objects that can be converted to series-like. In [9]: df2 = pd.DataFrame({'A': 1., ...: 'B': pd.Timestamp('20130102'), ...: 'C': pd.Series(1, index=list(range(4)), dtype='float32'), ...: 'D': np.array([3] * 4, dtype='int32'), ...: 'E': pd.Categorical(["test", "train", "test", "train"]), ...: 'F': 'foo'}) ...: In [10]: df2 Out[10]: ABCDEF 0 1.0 2013-01-02 1.0 3 test foo 1 1.0 2013-01-02 1.0 3 train foo 2 1.0 2013-01-02 1.0 3 test foo 3 1.0 2013-01-02 1.0 3 train foo
هذا الكود ينشئ DataFrame آخر باستخدام قاموس Python كمدخل. يتم تعيين الأعمدة باستخدام المفاتيح في القاموس: "A" و "B" و "C" و "D" و "E" و "F". يتم تعيين قيم الأعمدة بالترتيب:
pd.Timestamp('20130102')
، وهو كائن تاريخ ووقت من pandas يمثل الوقت 2013-01-02.pd.Series(1, index=list(range(4)), dtype='float32')
، وهو Series عشوائي يحتوي على الرقم 1.0 في جميع الصفوف.np.array([3] * 4, dtype='int32')
، وهو مصفوفة NumPy تحتوي على الرقم 3 في جميع الصفوف.pd.Categorical(["test", "train", "test", "train"])
، وهو عامل تصنيفي من pandas يحتوي على القيم "test" و "train".بعد ذلك، يتم طباعة هذا الـ DataFrame باستخدام
print(df2)
، والذي يظهر DataFrame في شكل جدول. الصفوف هي المفاتيح في القاموس، والأعمدة هي A و B و C و D و E و F. يتم إظهار القيم في خلايا الجدول، والتي تم تعيينها باستخدام المفاتيح في القاموس.التعريفات النوعية (dtypes) هي طريقة لوصف نوع البيانات المخزنة في DataFrame الخاص بك. تحدد التعريفات النوعية كيفية تخزين البيانات والعمليات التي يمكن تنفيذها عليها. يتم تعيين التعريفات النوعية تلقائيًا بناءً على القيم التي تم إدخالها في DataFrame، وقد تكون مختلفة بين الأعمدة.
في هذا المثال، يبين رسالة "The columns of the resulting DataFrame have different dtypes" أن التعريفات النوعية للأعمدة في DataFrame الذي تم إنشاؤه في الكود السابق مختلفة. على سبيل المثال، العمود "A" لديه تعريف نوع float64، بينما العمود "B" لديه تعريف نوع datetime64[ns]، والعمود "C" لديه تعريف نوع float32، والعمود "D" لديه تعريف نوع int32، والعمود "E" لديه تعريف نوع category، والعمود "F" لديه تعريف نوع object.
يمكن أن تتسبب التعريفات النوعية المختلفة في مشاكل في بعض العمليات، على سبيل المثال عند محاولة إجراء عملية حسابية على الأعمدة ذات التعريفات النوعية المختلفة. لذلك، يجب عليك التأكد من أن التعريفات النوعية للأعمدة في DataFrame الخاص بك متوافقة مع نوع البيانات الذي تعمل عليه.
The columns of the resulting DataFrame have different dtypes. اشرح
In [11]: df2.dtypes Out[11]: A B C D E F dtype: object float64 datetime64[ns] float32 int32 category object
هذه الرسالة توضح تعريفات الأعمدة في DataFrame
df2
التي تم إنشاؤه في الكود السابق باستخدامdf2.dtypes
. تتضمن التعريفات النوعية لكل عمود:يمكن استخدام هذه المعلومات للتأكد من أن التعريفات النوعية للأعمدة في DataFrame متوافقة مع العمليات التي تريد تنفيذها عليها، ويمكن أيضًا استخدامها لتحويل التعريفات النوعية إذا كان ذلك ضروريًا.
If you’re using IPython, tab completion for column names (as well as public attributes) is automatically enabled. Here’s a subset of the attributes that will be completed:
Here’s a subset of the attributes that will be completed: (continues on next page) In [12]: df2. # noqa: E225, E999 df2.A df2.bool df2.abs df2.boxplot df2.add df2.C df2.add_prefix df2.clip df2.add_suffix df2.columns
هذه الرسالة تظهر بعض الخيارات المتاحة لـ DataFrame
df2
عند استخدام النقطة والضغط على مفتاح الـ Tab في بيئة Jupyter Notebook أو IPython.df2.A
: العمود "A" في DataFramedf2
.df2.bool
: تحويل قيم DataFrame إلى قيم منطقية (True / False).df2.abs()
: قيم المطلقة لجميع القيم في DataFramedf2
.df2.boxplot()
: رسم مربع اللحية (boxplot) لجميع الأعمدة العددية في DataFramedf2
.df2.add()
: إضافة DataFrame آخر أو سلسلة إلى DataFramedf2
.df2.C
: العمود "C" في DataFramedf2
.df2.add_prefix()
: إضافة بادئة محددة إلى أسماء الأعمدة في DataFramedf2
.df2.clip()
: قص القيم في DataFramedf2
إلى الحد الأدنى والأقصى المحدد.df2.add_suffix()
: إضافة لاحقة محددة إلى أسماء الأعمدة في DataFramedf2
.df2.columns
: أسماء الأعمدة في DataFramedf2
.هذه ليست كل الخيارات المتاحة، ولكنها تمثل مجموعة متنوعة من الخيارات التي يمكن استخدامها في DataFrame
df2
باستخدام النقطة والضغط على مفتاح الـ Tab.2.1.2 Viewing data See the Basics section. Here is how to view the top and bottom rows of the frame:
In [13]: df.head() Out[13]: ABCD 2013-01-01 0.284713 0.778963 -0.462652 2.000377 2013-01-02 1.060129 0.051743 1.810738 -1.496037 2013-01-03 -1.121445 1.808866 -1.110269 0.456507 2013-01-04 1.226944 -1.359582 -0.648583 -0.055771 2013-01-05 -0.994286 -0.045295 -2.737315 -1.152376 In [14]: df.tail(3) Out[14]: ABCD 2013-01-04 1.226944 -1.359582 -0.648583 -0.055771 2013-01-05 -0.994286 -0.045295 -2.737315 -1.152376 2013-01-06 -0.908677 -1.577695 -0.203300 0.705411
هذا الكود يستخدم DataFrame
df
الذي تم إنشاؤه في وقت سابق.df.head()
يظهر أول 5 صفوف في DataFramedf
، والتي تحتوي على الأعمدة A و B و C و D. يتم طباعة الصفوف باستخدام الأرقام 0 إلى 4 كمفاتيح، ويتم عرض القيم في خلايا الجدول.df.tail(3)
يظهر آخر 3 صفوف في DataFramedf
، والتي تحتوي على الأعمدة A و B و C و D. يتم طباعة الصفوف باستخدام المفاتيح 3 إلى 5، ويتم عرض القيم في خلايا الجدول.يمكن استخدام هذه المعلومات لفهم بصورة أفضل كيفية تنظيم DataFrame الخاص بك، وللتحقق من القيم الموجودة في DataFrame الخاص بك.
df.index Out[15]: DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05', '2013-01-06'], dtype='datetime64[ns]', freq='D') In [16]: df.columns Out[16]: Index(['A', 'B', 'C', 'D'], dtype='object')
هذا الكود يستخدم DataFrame
df
الذي تم إنشاؤه في وقت سابق.df.index
يعرض فهرس الصفوف في DataFramedf
، والذي يتمثل في DateTimeIndex. يتم عرض الفهرس باستخدام تعريف النوع المحدد، وهو datetime64[ns]، ويتم تحديد التردد (freq) كل يوم (D).df.columns
يعرض أسماء الأعمدة في DataFramedf
، والتي هي 'A' و 'B' و 'C' و 'D'. يتم عرض أسماء الأعمدة باستخدام تعريف النوع المحدد، وهو object.يمكن استخدام هذه المعلومات لفهم بصورة أفضل كيفية تنظيم DataFrame الخاص بك، وللتحقق من الفهرس وأسماء الأعمدة المستخدمة في DataFrame الخاص بك.
DataFrame.to_numpy() gives a NumPy representation of the underlying data. Note that this can be an expensive operation when your DataFrame has columns with different data types, which comes down to a fundamental differ- ence between pandas and NumPy: NumPy arrays have one dtype for the entire array, while pandas DataFrames have one dtype per column. When you call DataFrame.to_numpy(), pandas will find the NumPy dtype that can hold all of the dtypes in the DataFrame. This may end up being object, which requires casting every value to a Python object. For df, our DataFrame of all floating-point values, DataFrame.to_numpy() is fast and doesn’t require copying data.
هذا النص يوضح كيفية عمل
DataFrame.to_numpy()
في pandas وكيفية تأثير تنوع أنواع بيانات الأعمدة في أداء هذه العملية.عند استخدام
DataFrame.to_numpy()
، يتم تحويل DataFrame إلى مصفوفة NumPy. ومع ذلك، يمكن أن تكون هذه العملية مكلفة في حالة وجود أعمدة في DataFrame لديها أنواع بيانات مختلفة. ويعود ذلك إلى الاختلاف الأساسي بين pandas و NumPy، حيث تحتوي مصفوفات NumPy على نوع بيانات واحد للمصفوفة بأكملها، بينما تحتوي DataFrame في pandas على نوع بيانات واحد لكل عمود. عند استخدامDataFrame.to_numpy()
، يبحث pandas عن النوع الأنسب في NumPy الذي يمكن أن يحتوي على جميع أنواع البيانات في DataFrame. ويمكن أن يكون النوع الأنسب object، والذي يتطلب تحويل كل قيمة إلى كائن Python.في حالة DataFrame
df
الذي يحتوي على قيم عائمة فقط، فإنDataFrame.to_numpy()
سريع ولا يتطلب نسخ البيانات. يمكن استخدام هذه المعلومات لفهم أداءDataFrame.to_numpy()
في pandas وكيفية تأثير تنوع أنواع بيانات الأعمدة في هذه العملية.pandas: powerful Python data analysis toolkit, Release 1.1.4 In [17]: df.to_numpy() Out[17]: array([[ 0.28471327, 0.77896334, -0.46265203, 2.00037694], [ 1.06012904, 0.05174282, 1.8107384 , -1.49603744], [-1.12144461, 1.80886593, -1.11026946, 0.45650726], [ 1.22694372, -1.35958242, -0.64858336, -0.05577083], [-0.99428556, -0.0452951 , -2.73731476, -1.15237614], [-0.90867653, -1.57769498, -0.20329955, 0.70541095]])
هذا الكود يستخدم DataFrame
df
الذي تم إنشاؤه في وقت سابق.df.to_numpy()
يحول DataFramedf
إلى مصفوفة NumPy. يتم تحويل كل قيمة في DataFrame إلى قيمة NumPy الخاصة بها، ويتم تخزين هذه القيم في مصفوفة NumPy متعددة الأبعاد. يمكن استخدام هذه المصفوفة لتطبيق العديد من عمليات NumPy عليها، مثل الحسابات الرياضية والعمليات الإحصائية.يمكن استخدام هذه المعلومات لفهم كيفية تحويل DataFrame إلى مصفوفة NumPy في pandas، وكيف يمكن استخدام هذه المصفوفة لتطبيق العديد من العمليات الرياضية والإحصائية المدعومة في NumPy.
df2.to_numpy() Out[18]: array([[1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'test', 'foo'], [1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'train', 'foo'], [1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'test', 'foo'], [1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'train', 'foo']], dtype=object)
هذا الكود يستخدم DataFrame
df2
الذي تم إنشاؤه في وقت سابق.df2.to_numpy()
يحول DataFramedf2
إلى مصفوفة NumPy. ومع ذلك، يتم تحديد نوع بيانات الخرج بـdtype=object
بدلاً من استخدام نوع بيانات عائم، حيث يتم دمج أنواع البيانات المختلفة في DataFrame في نوع بيانات واحد object. يتم تحويل كل قيمة في DataFrame إلى قيمة NumPy الخاصة بها، ويتم تخزين هذه القيم في مصفوفة NumPy متعددة الأبعاد. ويمكن ملاحظة أن القيم في المصفوفة الناتجة لا تحتوي على أي قيم عائمة، نظرًا لأن NaN ليست قيمة مقبولة في NumPy.يمكن استخدام هذه المعلومات لفهم كيفية تحويل DataFrame إلى مصفوفة NumPy في pandas، وكيف يتعامل NumPy مع أنواع البيانات المختلفة في DataFrame. ومن المهم ملاحظة أن استخدام
dtype=object
في الخرج يمكن أن يؤدي إلى تأثير سلبي على أداء العمليات الرياضية والإحصائية في NumPy.DataFrame.to_numpy()doesnotincludetheindexorcolumnlabelsintheoutput.
هذه العبارة تشير إلى أن دالة
DataFrame.to_numpy()
في pandas لا تشمل فهرس الصفوف وأسماء الأعمدة في المخرجات.عند استخدام
DataFrame.to_numpy()
، يتم تحويل DataFrame إلى مصفوفة NumPy. ومع ذلك، فإن الفهرس الخاص بالصفوف في DataFrame وأسماء الأعمدة لا تدخل في المصفوفة الناتجة. يتم حذف هذه المعلومات من المخرجات لتحقيق التوافق مع تعريف مصفوفات NumPy التي تحتوي على بيانات فقط ولا تشمل أي معلومات إضافية.يمكن استخدام هذه المعلومات لفهم ما يتم تضمينه وما لا يتم تضمينه في المخرجات عند استخدام
DataFrame.to_numpy()
في pandas. إذا كان من الضروري تضمين فهرس الصفوف وأسماء الأعمدة في المخرجات، يمكن استخدام خيارات أخرى في pandas مثلto_dict()
لتحويل DataFrame إلى قاموس Python.19]: df.describe()
هذا الكود يقوم بإنشاء ملخص إحصائي للبيانات في DataFrame
df
باستخدام الدالةdescribe()
في pandas.يتم إنشاء ملخص إحصائي يشمل المقاييس الإحصائية الأساسية مثل:
يتم إنشاء هذا الملخص لكل عمود في DataFrame التي يحتوي على بيانات رقمية. ويمكن استخدام هذه المعلومات لفهم توزيع البيانات ومستوى التغير في البيانات في DataFrame.
من بين البيانات المدرجة في الملخص الإحصائي هي المتوسط الحسابي والانحراف المعياري، والتي يمكن استخدامها لتحديد مدى تشتت البيانات، وإذا كانت بياناتها متجانسة أو لا.
Can you show me an example of how to use the describe() function?
بالتأكيد! إليك مثال على كيفية استخدام دالة
describe()
في pandas:لنفترض أن لدينا DataFrame يحتوي على بيانات متعلقة بمجموعة من الطلاب، ويتكون من الأعمدة التالية: "الاسم"، "العمر"، "الطول" و "الوزن".
لتطبيق دالة
describe()
على هذا البيانات، يمكن استخدام الكود التالي:سينتج عن هذا الكود ملخص إحصائي للبيانات في DataFrame
df
، والذي يمكن الاطلاع عليه عن طريق طباعته. يتضمن هذا الملخص الإحصائي المقاييس الأساسية لكل عمود في DataFrame، بما في ذلك العدد الإجمالي للصفوف، المتوسط الحسابي، الانحراف المعياري، الحد الأدنى، الربع الأول، الوسط، الربع الثالث، والحد الأعلى.يمكن تخصيص الإخراج من الدالة
describe()
باستخدام خيارات مختلفة، مثل تضمين بيانات غير عددية، وتغيير الدقة العددية، وتخصيص الاحتمالات المستخدمة في حساب الربع.بالتأكيد! إليك مثال على كيفية استخدام دالة
describe()
في pandas:لنفترض أن لدينا DataFrame يحتوي على بيانات متعلقة بمجموعة من الطلاب، ويتكون من الأعمدة التالية: "الاسم"، "العمر"، "الطول" و "الوزن".
لتطبيق دالة
describe()
على هذا البيانات، يمكن استخدام الكود التالي:سينتج عن هذا الكود ملخص إحصائي للبيانات في DataFrame
df
، والذي يمكن الاطلاع عليه عن طريق طباعته. يتضمن هذا الملخص الإحصائي المقاييس الأساسية لكل عمود في DataFrame، بما في ذلك العدد الإجمالي للصفوف، المتوسط الحسابي، الانحراف المعياري، الحد الأدنى، الربع الأول، الوسط، الربع الثالث، والحد الأعلى.يمكن تخصيص الإخراج من الدالة
describe()
باستخدام خيارات مختلفة، مثل تضمين بيانات غير عددية، وتغيير الدقة العددية، وتخصيص الاحتمالات المستخدمة في حساب الربع.20]: df.T Out[20]: 2013-01-01 2013-01-02 2013-01-03 2013-01-04 2013-01-05 2013-01-06 A 0.284713 B 0.778963 C -0.462652 D 2.000377 1.060129 0.051743 1.810738 -1.496037 -1.121445 1.808866 -1.110269 0.456507 1.226944 -1.359582 -0.648583 -0.055771 -0.994286 -0.045295 -2.737315 -1.152376 -0.908677 -1.577695 -0.203300 0.705411
هذا الكود يستخدم DataFrame
df
لإنشاء DataFrame جديدة تمثل النسخة المعكوسة (transpose) لـdf
باستخدام الدالةT
في pandas.عند استخدام
df.T
، يتم إنشاء DataFrame جديدة تمثل نفس البيانات فيdf
، ولكن تم تغيير ترتيب الصفوف والأعمدة، حيث تصبح الأعمدة هي الصفوف والصفوف هي الأعمدة. يتم تغيير هذا الترتيب بحيث يكون المحور الأفقي يمثل العناوين الرئيسية للصفوف (الأسماء الرئيسية للأعمدة في DataFrame الأصلي)، والمحور العمودي يمثل العناصر المختلفة في الصفوف.ويظهر في المثال أعلاه DataFrame جديدة بعد تطبيق
df.T
. يتكون هذا النموذج الجديد من 6 صفوف و 4 أعمدة، حيث يتمثل كل صف في الأعمدة الأصلية لـdf
، وكل عمود يتمثل في الصفوف الأصلية لـdf
. يمكن استخدام هذا DataFrame المعكوس لتحليل البيانات بشكل مختلف أو لإجراء عمليات معينة على البيانات.يمكن الوصول إلى الصفوف والأعمدة في DataFrame المعكوس باستخدام معامل الفهرسة المستخدم في pandas. على سبيل المثال، يمكن الوصول إلى الصف الأول (الذي يمثل الأعمدة الأصلية
A
) باستخدامdf.T.loc['A']
.Can you explain how to access a specific column in the transposed DataFrame?
بالتأكيد! يمكن الوصول إلى عمود محدد في DataFrame المعكوس باستخدام معامل الفهرسة المستخدم في pandas.
على سبيل المثال، إذا كنت تريد الوصول إلى العمود الثاني (الذي يمثل الصفوف الأصلية
B
) في DataFrame المعكوس، يمكن استخدامdf.T[1]
أوdf.T['B']
. وسيتم إرجاع Series تمثل هذا العمود.يمكن أيضًا الوصول إلى الصفوف بنفس الطريقة. على سبيل المثال، يمكن الوصول إلى الصف الثاني (الذي يمثل الأعمدة الأصلية
1.060129
) باستخدامdf.T.loc['1.060129']
. يمكن استخدام معامل الفهرسة في pandas للوصول إلى أي صف أو عمود في DataFrame المعكوس.df.sort_index(axis=1, ascending=False)
هذا الكود يستخدم DataFrame
df
لإعادة ترتيب أعمدته باستخدام الدالةsort_index()
في pandas.تستخدم الدالة
sort_index()
لإعادة ترتيب الصفوف أو الأعمدة في DataFrame بناءً على الفهرس المستخدم. في هذا المثال، يتم تمرير معاملaxis=1
لإرجاع DataFrame معين بترتيب الأعمدة، وascending=False
لترتيب الأعمدة بترتيب تنازلي.وبذلك، يتم إنشاء DataFrame جديدة تمثل نفس بيانات
df
، ولكن تم تغيير ترتيب الأعمدة بحيث يتم ترتيبها بترتيب تنازلي. يمكن استخدام هذا الترتيب الجديد لتحليل البيانات بشكل مختلف أو لإجراء عمليات معينة على البيانات.يمكن الوصول إلى الصفوف والأعمدة في DataFrame الجديدة باستخدام معامل الفهرسة المستخدم في pandas، وستكون الأعمدة مرتبة بترتيب تنازلي حسب الفهرس المستخدم. على سبيل المثال، يمكن الوصول إلى الأعمدة الأولى باستخدام
df_sorted.iloc[:, 0]
، والتي تحتوي على البيانات المرتبة في ترتيب تنازلي.22]: df.sort_values(by='B')
هذا الكود يستخدم DataFrame
df
لإعادة ترتيب الصفوف بناءً على قيمة عمود معين باستخدام الدالةsort_values()
في pandas.تستخدم الدالة
sort_values()
لإعادة ترتيب الصفوف في DataFrame بناءً على قيمة عمود معين. في هذا المثال، يتم تمرير معاملby='B'
لتحديد العمود الذي يتم الاستناد إليه لإعادة ترتيب الصفوف، والذي يمثل عمودB
في DataFramedf
.وبذلك، يتم إنشاء DataFrame جديدة تمثل نفس بيانات
df
، ولكن تم تغيير ترتيب الصفوف بحيث يتم ترتيبها بناءً على قيم العمودB
. يمكن استخدام هذا الترتيب الجديد لتحليل البيانات بشكل مختلف أو لإجراء عمليات معينة على البيانات.يمكن الوصول إلى الصفوف والأعمدة في DataFrame الجديدة باستخدام معامل الفهرسة المستخدم في pandas، وستكون الصفوف مرتبة بترتيب يتم تحديده بناءً على قيم العمود
B
. على سبيل المثال، يمكن الوصول إلى الصف الأول (الذي يمثل البيانات المرتبة بأقل قيمة في العمودB
) باستخدامdf_sorted.iloc[0, :]
.Note: While standard Python / Numpy expressions for selecting and setting are intuitive and come in handy for interactive work, for production code, we recommend the optimized pandas data access methods, .at, .iat, .loc and .iloc.
هذه ملاحظة في الوثائق الخاصة بـ pandas تشير إلى أنه على الرغم من أن التعبيرات القياسية في Python / Numpy للاختيار والتعيين تبدو بديهية وتأتي بمزايا في العمل التفاعلي، إلا أنها غير مثلى للعمليات الإنتاجية. وبالتالي، يتم توصية باستخدام طرق الوصول إلى البيانات المحسنة في pandas والتي تشمل الدوال التالية:
.at[]
: يستخدم للوصول إلى العنصر في DataFrame بناءً على الفهرس المستخدم..iat[]
: يستخدم للوصول إلى العنصر في DataFrame بناءً على الفهرس الصحيح (integer-based) المستخدم..loc[]
: يستخدم للاختيار والتعيين بناءً على الفهرس المستخدم..iloc[]
: يستخدم للاختيار والتعيين بناءً على الفهرس الصحيح (integer-based) المستخدم.تتميز هذه الدوال بأداء أفضل وفعالية أكبر عند التعامل مع بيانات pandas الكبيرة، ويمكن استخدامها بنفس الطريقة القياسية المستخدمة في Python / Numpy. لذلك، يتم توصية باستخدام هذه الدوال في الكود الإنتاجي للحصول على أداء محسن وتحسين كفاءة العمليات.
مثال على استخدام
.at[]
:مثال على استخدام
.iloc[]
:مثال على استخدام
.loc[]
:مثال على استخدام
.iat[]
:Getting Selecting a single column, which yields a Series, equivalent to df.A: In [23]: df['A'] Out[23]: 2013-01-01 2013-01-02 2013-01-03 2013-01-04 2013-01-05 2013-01-06 Freq: D, Name: A, dtype: float64 0.284713 1.060129 -1.121445 1.226944
هذا الكود يستخدم DataFrame
df
لاسترداد قيم العمود الفردي "A"، والذي يتم استرجاعه كـ Series في pandas.يمكن استرداد قيم العمود الفردي في DataFrame باستخدام المعامل
[]
وتحديد اسم العمود الذي يتم الاسترجاع. في هذا المثال، يتم استرداد قيم العمود "A" باستخدامdf['A']
.وبذلك، يتم إنشاء Series جديدة تحتوي على قيم العمود "A" في DataFrame
df
. يمكن الوصول إلى القيم في هذه الـ Series باستخدام معامل الفهرسة المستخدم في pandas. على سبيل المثال، يمكن الوصول إلى القيمة الأولى باستخدامdf['A'][0]
، والتي تحتوي على القيمة في الموضع الأول في العمود "A" في DataFrame.وتجدر الإشارة إلى أن الـ Series التي يتم استردادها تتضمن فهرسًا (index) يمكن استخدامه للوصول إلى القيم بشكل محدد، وفي هذا المثال، يتم استخدام فهرس يتم تسميته باسم "2013-01-01" إلى "2013-01-06".
df[0:3] Out[24]: ABCD 2013-01-01 0.284713 0.778963 -0.462652 2.000377 2013-01-02 1.060129 0.051743 1.810738 -1.496037 2013-01-03 -1.121445 1.808866 -1.110269 0.456507 In [25]: df['20130102':'20130104'] Out[25]: ABCD 2013-01-02 1.060129 0.051743 1.810738 -1.496037 2013-01-03 -1.121445 1.808866 -1.110269 0.456507 2013-01-04 1.226944 -1.359582 -0.648583 -0.055771
هذا الكود يستخدم DataFrame
df
لاسترداد صفوف من DataFrame بناءً على فهرس الصف أو بناءً على الفهرس الزمني.يمكن استرداد صفوف من DataFrame باستخدام المعامل
[]
وتحديد نطاق الصفوف المطلوب استردادها. في هذا المثال، يتم استرداد الصفوف من 0 إلى 3 باستخدامdf[0:3]
. يتم استخدام المؤشرات العددية لتحديد النطاق، والذي يتم تحديده كـ من 0 إلى 2، ويتم استرداد الصفوف الأول ، الثاني والثالث في DataFramedf
.وبذلك، يتم إنشاء DataFrame جديدة تتضمن الصفوف المحددة. يمكن الوصول إلى الصفوف والأعمدة في هذه الـ DataFrame باستخدام معامل الفهرسة المستخدم في pandas.
يمكن استرداد صفوف DataFrame بناءً على الفهرس الزمني باستخدام المعامل
[]
وتحديد الفاصل الزمني الذي يتم الاسترجاع في نطاق التواريخ. في هذا المثال، يتم استرداد الصفوف التي تتراوح بين "2013-01-02" و "2013-01-04" باستخدامdf['20130102':'20130104']
. يتم استخدام فهرس الفاصل الزمني لتحديد النطاق، والذي يتم استرجاع الصفوف المحددة في DataFrame.وبذلك، يتم إنشاء DataFrame جديدة تتضمن الصفوف المحددة. يمكن الوصول إلى الصفوف والأعمدة في هذه الـ DataFrame باستخدام معامل الفهرسة المستخدم في pandas.
Selection by label See more in Selection by Label. For getting a cross section using a label:
In [26]: df.loc[dates[0]]
يتم استخدام هذا الكود لاسترداد الصف الذي يتوافق مع تاريخ
dates[0]
في DataFramedf
في pandas.يتم استخدام
.loc[]
للاختيار بناءً على الفهرس، وفي هذا المثال، يتم استخدام تاريخdates[0]
كفهرس للاختيار باستخدامdf.loc[dates[0]]
.وفي هذه الحالة، يتم استرداد الصف الذي يتوافق مع التاريخ
dates[0]
في DataFrame، والذي يشير إلى الصف الأول في DataFramedf
. وبذلك، يتم إنشاء Series جديدة تحتوي على قيم الصف المحدد في DataFramedf
. يمكن الوصول إلى القيم في هذه الـ Series باستخدام معامل الفهرسة المستخدم في pandas. على سبيل المثال، يمكن الوصول إلى القيمة الأولى باستخدامdf.loc[dates[0]][0]
، والتي تحتوي على القيمة في الموضع الأول في الصف الأول في DataFrame.وتجدر الإشارة إلى أنه إذا تم استخدام فهرس زمني في DataFrame، يتم استخدام تاريخ الفهرس كمفتاح للاختيار.
What is the difference between .loc[] and .iloc[]?
.loc[]
و.iloc[]
هما اثنان من المعاملات الأساسية في pandas وهما يستخدمان لتحديد صفوف وأعمدة محددة في DataFrame. ولكن هناك فرق بينهما في الطريقة التي يتم بها تحديد الصفوف والأعمدة..loc[]
يتم استخدامه للاختيار بناءً على الفهرس، ويتم تحديد الصفوف والأعمدة باستخدام الفهرس الموجود في DataFrame. يمكن استخدام الفهرس العام أو الفهرس الزمني (إذا كان متاحًا) لتحديد الصفوف والأعمدة. على سبيل المثال، يمكن استخدام.loc[]
لتحديد الصف في DataFrame باستخدام الفهرس الزمني، كما في هذا المثال:يتم استخدام
.iloc[]
للاختيار بناءً على المؤشرات العددية، ويتم تحديد الصفوف والأعمدة باستخدام المؤشرات العددية للصفوف والأعمدة في DataFrame. يمكن استخدام.iloc[]
لتحديد الصف في DataFrame باستخدام المؤشر العددي، كما في هذا المثال:وبالتالي فإن الفرق الرئيسي بين
.loc[]
و.iloc[]
يكمن في طريقة تحديد الصفوف والأعمدة. علاوة على ذلك، يمكن استخدام.loc[]
للتحديد باستخدام الفهرس الزمني (إذا كان متاحًا)، بينما لا يمكن استخدام.iloc[]
للتحديد باستخدام الفهرس الزمني.df.loc[:, ['A', 'B']]
يتم استخدام هذا الكود للاختيار للصفوف والأعمدة المحددة في DataFrame
df
في pandas..loc[]
يستخدم للاختيار بناءً على الفهرس، وفي هذا المثال، يتم استخدام:
لتحديد كافة الصفوف وتحديد الأعمدة "A" و "B" باستخدام['A', 'B']
. يتم تحديد الأعمدة المحددة عن طريق توفير قائمة من أسماء الأعمدة الرئيسية في DataFrame.وبذلك، يتم إنشاء DataFrame جديدة تحتوي على الصفوف المحددة والأعمدة المحددة. يمكن الوصول إلى الصفوف والأعمدة في هذه الـ DataFrame باستخدام معامل الفهرسة المستخدم في pandas. كما يمكن عرض الـ DataFrame الجديد باستخدام
print(df.loc[:, ['A', 'B']])
.df.loc['20130102':'20130104', ['A', 'B']]
يتم استخدام هذا الكود للاختيار للصفوف والأعمدة المحددة في DataFrame
df
في pandas، باستخدام الفهرس الزمني للاختيار..loc[]
يستخدم للاختيار بناءً على الفهرس، وفي هذا المثال، يتم استخدام الفاصل الزمني "20130102" إلى "20130104" لتحديد الصفوف، وتحديد الأعمدة "A" و "B" باستخدام['A', 'B']
. يتم تحديد الأعمدة المحددة عن طريق توفير قائمة من أسماء الأعمدة الرئيسية في DataFrame.وبذلك، يتم إنشاء DataFrame جديدة تحتوي على الصفوف المحددة والأعمدة المحددة. يمكن الوصول إلى الصفوف والأعمدة في هذه الـ DataFrame باستخدام معامل الفهرسة المستخدم في pandas. كما يمكن عرض الـ DataFrame الجديد باستخدام
print(df.loc['20130102':'20130104', ['A', 'B']])
.وتجدر الإشارة إلى أنه عند استخدام الفهرس الزمني في DataFrame، يمكن استخدام تواريخ الفهرس كنقطة بداية ونقطة نهاية لتحديد الصفوف بينهما.
يتم استخدام هذا الكود للاختيار لقيمة محددة في DataFrame
df
في pandas، باستخدام الفهرس الزمني للاختيار..loc[]
يستخدم للاختيار بناءً على الفهرس، وفي هذا المثال، يتم استخدام التاريخdates[0]
لتحديد الصف، وتحديد العمود "A". يتم تحديد العمود المحدد باستخدام اسم العمود الرئيسي في DataFrame.وبذلك، يتم إنشاء قيمة جديدة تحتوي على القيمة المحددة في DataFrame
df
. يمكن الوصول إلى هذه القيمة باستخدام معامل الفهرسة المستخدم في pandas. يمكن عرض القيمة الجديدة باستخدامprint(df.loc[dates[0], 'A'])
.وتجدر الإشارة إلى أنه عند استخدام الفهرس الزمني في DataFrame، يمكن استخدام تاريخ الفهرس كنقطة لتحديد الصف.
df.at[dates[0], 'A']
يتم استخدام هذا الكود للاختيار لقيمة محددة في DataFrame
df
في pandas، باستخدام الفهرس الزمني للاختيار..at[]
يستخدم للاختيار لقيمة واحدة فقط بناءً على الفهرس، وفي هذا المثال، يتم استخدام التاريخdates[0]
لتحديد الصف، وتحديد العمود "A". يتم تحديد العمود المحدد باستخدام اسم العمود الرئيسي في DataFrame.وبذلك، يتم إنشاء قيمة جديدة تحتوي على القيمة المحددة في DataFrame
df
. يمكن الوصول إلى هذه القيمة باستخدام معامل الفهرسة المستخدم في pandas. يمكن عرض القيمة الجديدة باستخدامprint(df.at[dates[0], 'A'])
.يمكن استخدام
.at[]
عند الحاجة إلى الحصول على قيمة واحدة فقط في DataFrame، وهو أسرع من استخدام.loc[]
عند الحاجة إلى الحصول على قيمة واحدة فقط.وتجدر الإشارة إلى أنه عند استخدام الفهرس الزمني في DataFrame، يمكن استخدام تاريخ الفهرس كنقطة لتحديد الصف.
df.iloc[3]