Fahmy Mostafa نشر 28 يوليو 2021 أرسل تقرير نشر 28 يوليو 2021 هل هناك طريقة لتفريغ مصفوفة NumPy في ملف CSV؟ لدي مصفوفة NumPy ثنائة الأبعاد وأحتاج إلى حفظها بتنسيق يمكن للبشر قراءته مثل ملفات CSV. كيف أقوم بهذا الأمر؟ علمًا أن المصفوفة كبيرة بعض الشيء . هل يمكن أن أستعمل مكتبة Numpy فقط في هذه المهمة أم يجب أن أستعمل مكتبات أخرى مثل Pandas؟ 1 اقتباس
0 Wael Aljamal نشر 28 يوليو 2021 أرسل تقرير نشر 28 يوليو 2021 يمكن استخدام الوحدة numpy.savetxt لعمل المطلوب و حفظ المصفوفة في ملف CSV: import numpy a = numpy.asarray([ [1,2,3], [1,2,3], [1,2,3] ]) # تحديد اسم الملف و الفاصل بين البيانات numpy.savetxt("file.csv", a, delimiter=",") ويمكن باستعمال panda: import pandas as pd pd.DataFrame(np_array).to_csv("path/to/file.csv") أو الوحدة toFile: import numpy as np a = np.asarray([ [1,2,3], [4,5,6], [7,8,9] ]) a.tofile('foo.csv',sep=',',format='%10.5f') 1 اقتباس
0 عبدالباسط ابراهيم نشر 28 يوليو 2021 أرسل تقرير نشر 28 يوليو 2021 يمكنك استخدام savetxt وستعمل بشكل سليم ولكن إذا كان هناك بعض المصفوفات بالنمط int32 ربما لن يتم حفظ المصفوفة في الملف بشكل صحيح والنمط السابق بل ربما يتم تغيير النمط ولن تكون قابلة للقراءة لذلك نحتاج لاستخدام المعامل fmt كالتالي np.savetxt('values.csv', narr, fmt="%d", delimiter=",") #integer تعني أن يكون من نوع %d لاحظ ال وإذا كانت المصفوفة كبيرة نوعاً ما يمكنك استخدام الصيغة gz وهي تجعل الملف مضغوط عن طريق تغيير صيغة الملف فقط كالتالي #بدلاً من np.savetxt('values.csv', narr, fmt="%d", delimiter=",") #استخدم np.savetxt('values.gz', narr, fmt="%d", delimiter=",") 1 اقتباس
0 عبدالله عبدالرحمن11 نشر 28 يوليو 2021 أرسل تقرير نشر 28 يوليو 2021 كتابة المصفوفات كملفات CSV ذات الرؤوس تتطلب مزيدًا من العمل. هذا المثال يقرأ من ملف CSV ( example.csv) ويكتب محتوياته إلى ملف CSV آخر ( out.csv). import numpy as np # كتابة ملف # example.csv # مع رؤوس في السطر الأول with open('example.csv', 'w') as fp: fp.write('''\ col1,col2,col3 1,100.1,string1 2,222.2,second string ''') # قراءة الملف كمصفوفة # Numpy ar = np.recfromcsv('example.csv', encoding='ascii') print(repr(ar)) # rec.array([(1, 100.1, 'string1'), (2, 222.2, 'second string')], # dtype=[('col1', '<i8'), ('col2', '<f8'), ('col3', '<U13')]) # كتابته كملف # CSV # مع الرؤوس في السطر الأول with open('out.csv', 'w') as fp: fp.write(','.join(ar.dtype.names) + '\n') np.savetxt(fp, ar, '%s', ',') لاحظ أن المثال أعلاه لا يمكنه معالجة القيم التي تكون سلاسل نصية وبها فاصلات. لتضمين القيم غير الرقمية دائمًا بين علامات الاقتباس ، استخدم الوحدة csv المضمنة: import csv with open('out2.csv', 'w', newline='') as fp: writer = csv.writer(fp, quoting=csv.QUOTE_NONNUMERIC) writer.writerow(ar.dtype.names) writer.writerows(ar.tolist()) 1 اقتباس
2 Ali Haidar Ahmad نشر 28 يوليو 2021 أرسل تقرير نشر 28 يوليو 2021 هناك عدة طرق للقيام بذلك، أولها استخدام باندا: import pandas as pd import numpy as np # إنشاءمصفوفة a = np.arange(3,4).reshape(-1,2) # طباعة المصفوفة print(a) # تحويل المصفوفة إلى DataFrame df = pd.DataFrame(a) #CSV حفظ الداتافريم كملف df.to_csv("data1.csv", index=False) #يفضل إلغاء تخزين عمود الفهرس لأنه قد يسبب لك مشاكل عند إعادة تحميل الملف الطريقة الثانية هي استخدام numpy_array.tofile(): import numpy as np # إنشاء مصفوفة a = np.arange(3,4) # عرض المصفوفة print(a) #tofile() استخدام الطريقة #',' يجب أن تستخدم الفاصلة # إنشاء الملف a.tofile('data2.csv', sep = ',') استخدام numpy.savetext(): """ numpy.savetxt(fname, arr, fmt='%.18e', delimiter=' ', newline='\n', header='', footer='', comments='# ', encoding=None) """ import numpy as np # إنشاء مصفوفة arr = np.array([[11, 16, 3], [1, 0, 8]]) #CSV حفظ المصفوفة في ملف np.savetxt("a.csv", arr, delimiter = ",") لكن هنا سيتم تخزين البيانات في تنسيق أسي ك float مثل 2.000000000000000000e+00 لذا يجب عليك تغيير ال formatting باستخدام الوسيط fmt كما يلي: np.savetxt('a.csv', arr, fmt="%d", delimiter=",") طبعاً delimiter هو سلسلة أو حرف لاستخدامه كفاصل عنصر. و newline سلسلة أو حرف لاستخدامه كفاصل أسطر. و header تكتب سلسلة في بداية ملف txt أي ترويسة. أما footer فتكتب سلسلة في نهاية الملف (ذيل). و fmt افتراضياً تكون %.18e أي بالتنسيق الأسي. أما arr فهي مصفوفة أحادية أو ثنائية البعد حصراً. مثال آخر: import numpy as np arr = np.array([6, 1, 4, 2, 18, 9, 3, 4, 2, 8, 11]) np.savetxt('array.csv', [arr], delimiter=',', fmt='%d') # ستخزن بالشكل التالي # 6,1,4,2,18,9,3,4,2,8,11 مررنا المحدد "،" لجعله بتنسيق csv. تم قمنا بتمرير نوع التنسيق أيضاً كـ "٪ d" ، أي تخزين العناصر كأعداد صحيحة. وكما أشرت فإنه بشكل افتراضي، سيتم تخزين الأرقام بتنسيق عائم flotting point. وللتنويه أيضاً، إذا لم تقم بإحاطة مصفوفة numpy ب [] أي تحويلها إلى قائمة أثناء تمريرها إلى numpy.savetxt () فقد لا يعمل محدد الفاصلة، وسيستخدم "\ n" كمحدد افتراضي. لذا يفضل إحاطتها. مثال آخر مع إضافة ترويسة وذيل: np.savetxt('array_hf.csv', [arr], delimiter=',', fmt='%d' , header='A Sample 2D Numpy Array :: Header', footer='This is footer') """ # A Sample 2D Numpy Array :: Header 6,1,4,2,18,9,3,4,2,8,11 # This is footer """ مثال آخر مع مصفوفة ثنائية الأبعاد: arr2D = np.array([[11, 12, 13, 22], [21, 7, 23, 14], [31, 10, 33, 7]]) np.savetxt('2darray.csv', arr2D, delimiter=',', fmt='%d') """ 11,12,13,22 21,7,23,14 31,10,33,7 """ أيضاً، بدلاً من حفظ مصفوفة كاملة ثنائية الأبعاد في ملف csv ، إذا أردنا، يمكننا حفظ أعمدة أو صفوف فردية أو متعددة فقط. # حفظ عمود np.savetxt('a.csv', [arr2D[:,1]], delimiter=',', fmt='%d') """ 12,7,10 """ # حفظ سطر np.savetxt('aa.csv', [arr2D[1] ], delimiter=',', fmt='%d') """ 21,7,23,14 """ ولحفظ مصفوفة مهيكلة Structured Numpy array: dtype = [('Name', (np.str_, 10)), ('Marks', np.float64)] structure = np.array([('Ali', 21.2, 5), ('Eyad', 22.3, 4)], dtype=dtype) print(structure) # [('Ali', 21.2, 5) ('Eyad', 22.3, 4)] np.savetxt('structured.csv', structure, delimiter=',', fmt=['%s' , '%f', '%d'], header='Name,Marks,Age', comments='') """ Name,Marks,Age Ali,21.2, 5 Eyad,22.3, 4 """ وبما أن كل عنصر في المصفوفة الرقمية الخاصة بنا كان عبارة عن مزيج من سلسلة ، عدد عشري وعدد صحيح ، لذلك أثناء حفظه في ملف csv ، نقوم بتمرير خيارات التنسيق كلها أي ["٪ s" ، "٪ f" ، "٪ d"] ويمكنك لاحقاً تحميل الملف بعدة طرق، باستخدام loadtxt: from numpy import loadtxt # تحميل المصفوفة data = loadtxt('data.csv', delimiter=',') # طباعتها print(data) أو من باندا: import pandas as pd data = pd.read_csv("filename.csv") # عرض أول 5 أسطر من الملف data.head() # إذا أردت عرض أسطر أكثر مرر عددها إلى الوسيط التالي data.head(n=10) 2 اقتباس
السؤال
Fahmy Mostafa
هل هناك طريقة لتفريغ مصفوفة NumPy في ملف CSV؟ لدي مصفوفة NumPy ثنائة الأبعاد وأحتاج إلى حفظها بتنسيق يمكن للبشر قراءته مثل ملفات CSV.
كيف أقوم بهذا الأمر؟ علمًا أن المصفوفة كبيرة بعض الشيء . هل يمكن أن أستعمل مكتبة Numpy فقط في هذه المهمة أم يجب أن أستعمل مكتبات أخرى مثل Pandas؟
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.