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

السؤال

نشر

لدي 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
نشر

يمكننا أن نحول 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...