اذهب إلى المحتوى
  • 0

تحويل DataFrame إلى مصفوفة numpy

Fahmy Mostafa

السؤال

لدي DataFrame بإستخدام مكتبة Pandas كالتالي:

DataFrame([
               {'var1': 'a', 'var2': 1},
               {'var1': 'b', 'var2': 1},
               {'var1': 'c', 'var2': 1},
               {'var1': 'd', 'var2': 2},
               {'var1': 'e', 'var2': 2},
               {'var1': 'f', 'var2': 2}
])

كيف يمكنني أن أحول إطار البيانات هذا إلى مصفوفة في مكتبة Numpy؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

من DataFrame الى مصفوفة NumPy

في المثال الآتي نقوم بتحويل DataFrame الى مصفوفة NumPy

import pandas as pd

#تهيئة
#DataFrame
df = pd.DataFrame(
	[[21, 72, 67],
	[23, 78, 69],
	[32, 74, 56],
	[52, 54, 76]],
	columns=['a', 'b', 'c'])

print('DataFrame\n----------\n', df)

#التحويل
arr = df.to_numpy()

print('\nNumpy Array\n----------\n', arr)

وللتحويل من DataFrame الى مصفوفة NumPy عندما يكون لدى DataFrame أنواع بيانات مختلفة

import pandas as pd
import numpy as np

#تهيئة
# dataframe
df = pd.DataFrame(
	[[21, 72, 67.1],
	[23, 78, 69.5],
	[32, 74, 56.6],
	[52, 54, 76.2]],
	columns=['a', 'b', 'c'])

print('DataFrame\n----------\n', df)
print('\nDataFrame datatypes :\n', df.dtypes)

#التحويل
arr = df.to_numpy()

print('\nNumpy Array\n----------\n', arr)
print('\nNumpy Array Datatype :', arr.dtype)

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

يمكنك استخدام الدالة  to_numpy()  وهذه الدالة تقوم باسترجاع الناتج كالتالي

DataFrame([
               {'var1': 'a', 'var2': 1},
               {'var1': 'b', 'var2': 1},
               {'var1': 'c', 'var2': 1},
               {'var1': 'd', 'var2': 2},
               {'var1': 'e', 'var2': 2},
               {'var1': 'f', 'var2': 2}
]).to_numpy()

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

يمكننا أن نحول dataframe إلى مصفوفة عن طريق إستخدام .values أيضاً إذ أنها تخرج الناتج في شكل مصفوفة كما هو موضح في المثال التالي:

import numpy as np
import pandas as pd

df = pd.DataFrame([
               {'var1': 'a', 'var2': 1},
               {'var1': 'b', 'var2': 1},
               {'var1': 'c', 'var2': 1},
               {'var1': 'd', 'var2': 2},
               {'var1': 'e', 'var2': 2},
               {'var1': 'f', 'var2': 2}])
df.values

أو يمكننا الحصول على البيانات كاملة بالإضافة لindex بإضافة الدالة reset_index() وتصبح الدالة كالتالي:

df.reset_index().values

كما يمكننا الحصول على البيانات بالindex أيضاً بإستخدام الدالة to_records() كالتالي:

df.to_records()

لكن بالطبع التحويل بإستخدام الدالة المخصصة لذلك هي أفضل مثلما هو موضح في الإجابتين السابقتين و ذلك لتفادي أي أخطاء قد تنتج.

كما يمكننا الحصول على مصفوفة بإستخدام الدالة asarray التي تستقبل dataframe كمدخل و ترجع مصفوفة البيانات أو إستخدام الدالة array التي تقوم بنفس العملية، البرنامج التالي يوضح طريقة إستخدام الدالتين:

np.asarray(df)
np.array(df)

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
import pandas as pd

DataFrame = pd.DataFrame([
               {'var1': 'a', 'var2': 1},
               {'var1': 'b', 'var2': 1},
               {'var1': 'c', 'var2': 1},
               {'var1': 'd', 'var2': 2},
               {'var1': 'e', 'var2': 2},
               {'var1': 'f', 'var2': 2}
])


print(DataFrame.to_numpy())

## Output

# [['a' 1]
#  ['b' 1]
#  ['c' 1]
#  ['d' 2]
#  ['e' 2]
#  ['f' 2]]

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

إضافة إلى الطرق المذكورة أعلاه، فإن الحل الأسهل هو استخدام الدالة asarray :

import pandas as pd
import numpy as np    
df=pd.DataFrame({"A": [1, 2], "B": [3, 4]})
np.asarray(df)
"""
array([[1, 3],
       [2, 4]])
"""

أو من خلال np.array وبسهولة:

import pandas as pd
import six
import numpy as np    
df=pd.DataFrame({"A": [1, 2], "B": [3, 4]})
np.array(df)
"""
array([[1, 3],
       [2, 4]])
"""

,وهنا مقارنة بين الثلاث طرق الرئيسية للتحويل:

%time np.array(df)
%time df.to_numpy()
%time np.asarray(df)
"""
CPU times: user 105 µs, sys: 7 µs, total: 112 µs
Wall time: 117 µs
CPU times: user 59 µs, sys: 0 ns, total: 59 µs
Wall time: 62.2 µs
CPU times: user 79 µs, sys: 0 ns, total: 79 µs
Wall time: 84.4 µs
"""

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...