Zrzut tablicy NumPy do pliku csv

Czy istnieje sposób na zrzut tablicy NumPy do pliku CSV? Mam tablicę NumPy 2D i muszę ją zrzucić w formacie czytelnym dla człowieka.

Author: senderle, 2011-05-21

7 answers

numpy.savetxt zapisuje tablicę do pliku tekstowego.

import numpy
a = numpy.asarray([ [1,2,3], [4,5,6], [7,8,9] ])
numpy.savetxt("foo.csv", a, delimiter=",")
 564
Author: Jim Brissom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-26 05:39:44

Z pandami jest łatwo i szybko]}

import pandas as pd 
df = pd.DataFrame(np_array)
df.to_csv("file_path.csv")
 57
Author: maxbellec,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-12 08:38:49

tofile jest do tego wygodną funkcją:

import numpy as np
a = np.asarray([ [1,2,3], [4,5,6], [7,8,9] ])
a.tofile('foo.csv',sep=',',format='%10.5f')

Strona podręcznika zawiera kilka przydatnych uwag:

Jest to wygodna funkcja do szybkiego przechowywania danych tablicy. Informacja o endianess i precyzji jest tracona, więc ta metoda nie jest dobry wybór dla plików przeznaczonych do archiwizacji danych lub transportu danych między maszynami o różnej endianness. Niektóre z tych problemów mogą być przezwyciężone przez przesyłanie danych w postaci plików tekstowych, kosztem szybkość i plik rozmiar.

Uwaga. Ta funkcja nie tworzy wielowierszowych plików csv, zapisuje wszystko w jednej linii.

 31
Author: atomh33ls,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-07 17:57:45

Zapis tablic rekordów jako plików CSV z nagłówkami wymaga nieco więcej pracy.

Ten przykład odczytuje plik CSV z nagłówkiem w pierwszej linii, a następnie zapisuje ten sam plik.

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

Zauważ, że ten przykład nie uwzględnia łańcuchów z przecinkami. Aby rozważyć cudzysłowy dla danych nieliczbowych, użyj csv opakowanie:

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())
 9
Author: Mike T,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-08 02:09:18

Jeśli chcesz napisać w kolumnie:

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

Tutaj 'a 'jest nazwą tablicy numpy, a 'file' jest zmienną do zapisu w pliku.

Jeśli chcesz napisać w wierszu:

    writer= csv.writer(file, delimiter=',')
    for x in np.nditer(a.T, order='C'): 
            row.append(str(x))
    writer.writerow(row)
 3
Author: Rimjhim Bhagat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-07 10:49:58

Jeśli chcesz zapisać tablicę numpy (np. your_array = np.array([[1,2],[3,4]])) do jednej komórki, możesz ją najpierw przekonwertować za pomocą your_array.tolist().

Następnie zapisz go w normalny sposób do jednej komórki, z delimiter=';' a komórka w pliku csv będzie wyglądała tak [[1, 2], [2, 4]]

Wtedy możesz przywrócić tablicę w ten sposób: your_array = np.array(ast.literal_eval(cell_string))

 2
Author: Mr Poin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-17 17:23:37

Możesz to również zrobić z czystym Pythonem bez użycia żadnych modułów.

# 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)
 2
Author: Greg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-29 01:39:39