python - एक csv फ़ाइल में एक NumPy सरणी डंप करें




arrays (5)

क्या एक NumPy सरणी को एक CSV फ़ाइल में डंप करने का कोई तरीका है? मेरे पास 2 डी न्यूमपी सरणी है और इसे मानव-पठनीय प्रारूप में डंप करने की आवश्यकता है।


आप इसे किसी भी मॉड्यूल के बिना शुद्ध पायथन के साथ भी कर सकते हैं।

# format as a block of csv text to do whatever you want
csv_rows = ["{},{}".format(i, j) for i, j in array]
csv_text = "\n".join(csv_rows)

# write it to a file
with open('file.csv', 'w') as f:
    f.write(csv_text)

पांडा के साथ यह आसान और तेज़ है

import pandas as pd 
df = pd.DataFrame(np_array)
df.to_csv("file_path.csv")

हेडर के साथ सीएसवी फाइलों के रूप में रिकॉर्ड एरे लिखना थोड़ा और काम की आवश्यकता है।

यह उदाहरण पहली पंक्ति पर शीर्षलेख के साथ एक CSV फ़ाइल पढ़ता है, फिर उसी फ़ाइल को लिखता है।

import numpy as np

# Write an example CSV file with headers on first line
with open('example.csv', 'w') as fp:
    fp.write('''\
col1,col2,col3
1,100.1,string1
2,222.2,second string
''')

# Read it as a Numpy record array
ar = np.recfromcsv('example.csv')
print(repr(ar))
# rec.array([(1, 100.1, 'string1'), (2, 222.2, 'second string')], 
#           dtype=[('col1', '<i4'), ('col2', '<f8'), ('col3', 'S13')])

# Write as a CSV file with headers on first line
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', 'wb') as fp:
    writer = csv.writer(fp, quoting=csv.QUOTE_NONNUMERIC)
    writer.writerow(ar.dtype.names)
    writer.writerows(ar.tolist())

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')

मैन पेज में कुछ उपयोगी नोट्स हैं:

यह सरणी डेटा के त्वरित भंडारण के लिए एक सुविधा समारोह है। अंतहीनता और परिशुद्धता पर जानकारी खो जाती है, इसलिए यह विधि विभिन्न एंडियननेस वाली मशीनों के बीच डेटा या परिवहन डेटा संग्रहित करने के लिए फ़ाइलों के लिए एक अच्छी पसंद नहीं है। गति और फ़ाइल आकार की कीमत पर, डेटा फ़ाइलों को पाठ फ़ाइलों के रूप में आउटपुट करके इन समस्याओं में से कुछ को दूर किया जा सकता है।

ध्यान दें। यह फ़ंक्शन मल्टी-लाइन सीएसवी फाइलों का उत्पादन नहीं करता है, यह सब कुछ एक पंक्ति में बचाता है।


अगर आप कॉलम में लिखना चाहते हैं:

    for x in np.nditer(a.T, order='C'): 
            file.write(str(x))
            file.write("\n")

यहां 'ए' numpy सरणी का नाम है और 'फ़ाइल' एक फ़ाइल में लिखने के लिए चर है।

यदि आप पंक्ति में लिखना चाहते हैं:

    writer= csv.writer(file, delimiter=',')
    for x in np.nditer(a.T, order='C'): 
            row.append(str(x))
    writer.writerow(row)





numpy