es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Verificar el arreglo de numpy en el que el elemento tiene el tipo pywintypes.datetime.

Tengo una matriz numpy de dos dimensiones en la que la mayoría de los elementos son cadenas, pero algunos son pywintypes.datetime. Debido a que esto causa un error cuando guardo este objeto en un archivo con pickle, convertiré los pytwintypes.datetime a cadena usando el comando strftime.

PicklingError: No se puede hacer pickle de : la búsqueda de atributos datetime en pywintypes falló.

Si toda la columna o fila consiste en pywintypes.datetime, no es difícil, pero no es así.

Para un solo elemento, aprendí de https://stackoverflow.com/questions/44656089/how-to-test-for-pywintypes-datetime-type-with-isinstance que

import datetime
isinstance(q, datetime.datetime)

da como resultado True/False si es formato datetime.

¿Cómo puedo encontrar los índices o reemplazarlos sin usar bucles?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Puede usar la función np.where para encontrar los índices de los elementos en el array que sean del tipo pywintypes.datetime. Por ejemplo:

    import numpy as np
    import pywintypes
    

    Crear un array numpy 2D con algunos elementos del tipo pywintypes.datetime

    arr = np.array([[1, 2, 3], [4, pywintypes.datetime(2020, 1, 1), 6], [7, 8, 9]])
    

    Encontrar los índices de los elementos del tipo pywintypes.datetime

    indices = np.where(arr.dtype == pywintypes.datetime)
    

    Imprimir los índices

    print(indices)
    

    Output: (array([1]), array([1]))

    Una vez que tenga los índices, puede usarlos para reemplazar los elementos con cadenas usando el método strftime. Por ejemplo:

    <h1>Reemplazar los elementos con cadenas usando strftime</h1>
    arr[indices] = arr[indices].strftime('%Y-%m-%d')
    
    <h1>Imprimir el array</h1>
    print(arr)
    
    <h1>Output:</h1>
    
    <h1>array([['1', '2', '3'],</h1>
    
    <h1>['4', '2020-01-01', '6'],</h1>
    
    <h1>['7', '8', '9']], dtype='<></h1>
    
    

Comments are closed.