Nuestro team redactor ha estado horas investigando para darle soluciones a tu búsqueda, te regalamos la respuestas así que nuestro objetivo es resultarte de mucha apoyo.
Esta página aborda aplicaciones comunes; para obtener la colección completa de rutinas de E / S, consulte Entrada y salida.
Leer texto y CSV archivos
Sin valores perdidos
Usar numpy.loadtxt
.
Con valores perdidos
Usar numpy.genfromtxt
.
numpy.genfromtxt
bien
- devolver un matriz enmascaradaenmascarar los valores perdidos (si
usemask=True
), o - completa el valor que falta con el valor especificado en
filling_values
(por defecto esnp.nan
para float, -1 para int).
Con delimitadores que no son espacios en blanco
>>>print(open("csv.txt").read())1,2,34,,67,8,9
Salida de matriz enmascarada
>>> np.genfromtxt("csv.txt", delimiter=",", usemask=True) masked_array( data=[[1.0,2.0,3.0],[4.0,--,6.0],[7.0,8.0,9.0]], mask=[[False,False,False],[False,True,False],[False,False,False]], fill_value=1e+20)
Salida de matriz
>>> np.genfromtxt("csv.txt", delimiter=",") array([[1.,2.,3.],[4., nan,6.],[7.,8.,9.]])
Salida de matriz, valor de relleno especificado
>>> np.genfromtxt("csv.txt", delimiter=",", dtype=np.int8, filling_values=99) array([[1,2,3],[4,99,6],[7,8,9]], dtype=int8)
Delimitado por espacios en blanco
numpy.genfromtxt
también puede analizar archivos de datos delimitados por espacios en blanco que tienen valores perdidos si
-
Cada campo tiene un ancho fijo: Utilice el ancho como
delimiter
argumento.# File with width=4. The data does not have to be justified (for example,# the 2 in row 1), the last column can be less than width (for example, the 6# in row 2), and no delimiting character is required (for instance 8888 and 9# in row 3)>>> f =open("fixedwidth.txt").read()# doctest: +SKIP>>>print(f)# doctest: +SKIP123446788889# Showing spaces as ^>>>print(f.replace(" ","^"))# doctest: +SKIP1^^^2^^^^^^344^^^^^^67^^^88889>>> np.genfromtxt("fixedwidth.txt", delimiter=4)# doctest: +SKIP array([[1.000e+00,2.000e+00,3.000e+00],[4.400e+01, nan,6.000e+00],[7.000e+00,8.888e+03,9.000e+00]])
-
Un valor especial (por ejemplo, “x”) indica que falta un campo: Úselo como
missing_values
argumento.>>>print(open("nan.txt").read())12344 x 6788889>>> np.genfromtxt("nan.txt", missing_values="x") array([[1.000e+00,2.000e+00,3.000e+00],[4.400e+01, nan,6.000e+00],[7.000e+00,8.888e+03,9.000e+00]])
-
Quieres omitir las filas con valores perdidos: Colocar
invalid_raise=False
.>>>print(open("skip.txt").read())12344678889>>> np.genfromtxt("skip.txt", invalid_raise=False) __main__:1: ConversionWarning: Some errors were detected ! Line #2 (got 2 columns instead of 3) array([[1.,2.,3.],[7.,888.,9.]])
-
El carácter de espacio en blanco delimitador es diferente del espacio en blanco que indica datos faltantes. Por ejemplo, si las columnas están delimitadas por
t
, los datos faltantes se reconocerán si constan de uno o más espacios.>>> f =open("tabs.txt").read()>>>print(f)12344678889# Tabs vs. spaces>>>print(f.replace("t","^"))1^2^344^^67^888^9>>> np.genfromtxt("tabs.txt", delimiter="t", missing_values=" +") array([[1.,2.,3.],[44., nan,6.],[7.,888.,9.]])
Leer un archivo en formato .npy o .npz
Opciones:
- Usar
numpy.load
. Puede leer archivos generados por cualquiera denumpy.save
,numpy.savez
, onumpy.savez_compressed
. - Utilice el mapeo de memoria. Ver
numpy.lib.format.open_memmap
.
Escribir en un archivo para que NumPy lo vuelva a leer
Binario
Usar numpy.save
, o para almacenar múltiples matrices numpy.savez
o numpy.savez_compressed
.
Para seguridad y portabilidad, colocar allow_pickle=False
a menos que el dtype contenga objetos de Python, lo que requiere decapado.
Matrices enmascaradas can't currently be saved
, ni tampoco otras subclases de matrices arbitrarias.
Legible por humanos
numpy.save
y numpy.savez
crear archivos binarios. Para escribir un archivo legible por humanos, usar numpy.savetxt
. La matriz solo puede ser de 1 o 2 dimensiones, y no hay “savetxtz” para varios archivos.
Grandes matrices
Ver Escribir o leer matrices grandes.
Leer un archivo binario con formato arbitrario (“blob binario”)
Utilizar una matriz estructurada.
Ejemplo:
los .wav
El encabezado del archivo es un bloque de 44 bytes que precede data_size
bytes de los datos de sonido reales:
chunk_id "RIFF" chunk_size 4-byte unsigned little-endian integer format"WAVE" fmt_id "fmt " fmt_size 4-byte unsigned little-endian integer audio_fmt 2-byte unsigned little-endian integer num_channels 2-byte unsigned little-endian integer sample_rate 4-byte unsigned little-endian integer byte_rate 4-byte unsigned little-endian integer block_align 2-byte unsigned little-endian integer bits_per_sample 2-byte unsigned little-endian integer data_id "data" data_size 4-byte unsigned little-endian integer
los .wav
encabezado del archivo como un dtype estructurado NumPy:
wav_header_dtype = np.dtype([("chunk_id",(bytes,4)),# flexible-sized scalar type, item size 4("chunk_size","),# little-endian unsigned 32-bit integer("format","S4"),# 4-byte string, alternate spelling of (bytes, 4)("fmt_id","S4"),("fmt_size"," ),("audio_fmt"," ),#("num_channels"," ),# .. more of the same ...("sample_rate"," ),#("byte_rate"," ),("block_align"," ),("bits_per_sample"," ),("data_id","S4"),("data_size"," ),## the sound data itself cannot be represented here:# it does not have a fixed size]) header = np.fromfile(f, dtype=wave_header_dtype, count=1)[0]
Esta .wav
el ejemplo es para ilustración; leer un .wav
archivo en la vida real, use el módulo incorporado de Python wave
.
(Adaptado de Pauli Virtanen, NumPy avanzado, licenciado bajo CC BY 4.0.)
Escribir o leer matrices grandes
Matrices demasiado grandes para caber en la memoria se pueden tratar como matrices en memoria ordinarias mediante el mapeo de memoria.
-
Datos de matriz sin procesar escritos con
numpy.ndarray.tofile
onumpy.ndarray.tobytes
se puede leer connumpy.memmap
:array = numpy.memmap("mydata/myarray.arr", mode="r", dtype=np.int16, shape=(1024,1024))
-
Archivos generados por
numpy.save
(es decir, usando el formato numpy) se puede leer usandonumpy.load
con elmmap_mode
argumento de palabra clave:large_array[some_slice]= np.load("path/to/small_array", mmap_mode="r")
El mapeo de memoria carece de funciones como fragmentación y compresión de datos; Los formatos y bibliotecas más completos que se pueden usar con NumPy incluyen:
- HDF5: h5py o PyTables.
- Zarr: aquí.
- NetCDF:
scipy.io.netcdf_file
.
Para conocer las compensaciones entre memmap, Zarr y HDF5, consulte pythonspeed.com.
Escribir archivos para leer con otras herramientas (que no sean NumPy)
Formatos para intercambiando datos con otras herramientas incluyen HDF5, Zarr y NetCDF (consulte Escribir o leer matrices grandes).
Escribir o leer un archivo JSON
Las matrices NumPy son no directamente JSON serializable.
Guardar / restaurar usando un archivo pickle
Evite cuando sea posible; pepinillos no son seguros contra datos construidos erróneamente o maliciosamente.
Usar numpy.save
y numpy.load
. Colocar allow_pickle=False
, a menos que la matriz dtype incluya objetos Python, en cuyo caso se requiere decapado.
Convierta de un DataFrame de pandas a una matriz NumPy
Ver pandas.DataFrame.to_numpy
.
Guardar / restaurar usando tofile y fromfile
En general, prefiera numpy.save
y numpy.load
.
numpy.ndarray.tofile
y numpy.fromfile
pierden información sobre endianidad y precisión y, por lo tanto, no son adecuados para nada que no sea almacenamiento desde cero.
Si conservas algún recelo o forma de aclarar nuestro crónica eres capaz de añadir una crítica y con mucho placer lo analizaremos.