python - read - Comportamiento inesperado al asignar 2d numpy array a pandas DataFrame
pandas dataframe tutorial (3)
Las series de pandas son una matriz numpy, ya que es una columna, la trata como un objeto, a la que la referencia ha cambiado.
>> import numpy as np
>>> x = np.zeros((4,1))
>>> x = np.random.randn(4,2)
>>> y= np.zeros((4,1))
>>> y
array([[0.],
[0.],
[0.],
[0.]])
>>> x
array([[-1.00731291, -0.37151425],
[-0.78154847, -0.72854126],
[-0.98566253, 1.68786232],
[ 0.12614892, 0.41804799]])
>>> y = x
>>>y
array([[-1.00731291, -0.37151425],
[-0.78154847, -0.72854126],
[-0.98566253, 1.68786232],
[ 0.12614892, 0.41804799]])
Tengo el siguiente código:
x = pd.DataFrame(np.zeros((4, 1)), columns=[''A''])
y = np.random.randn(4, 2)
x[''A''] = y
Espero que lance una excepción debido a la falta de coincidencia de formas. Pero los pandas aceptaron silenciosamente la tarea: la primera columna de y está asignada a x
.
¿Es este un diseño intencional? Si es así, ¿cuál es la razón detrás?
pandas
dos pandas
0.21 y 0.23.
Gracias por los que intentaron ayudar. Sin embargo, nadie da una respuesta satisfactoria aunque la recompensa va a expirar.
Déjame enfatizar lo que se espera como respuesta:
- ¿Si este diseño es intencional? Es un error ? ¿Es un diseño falso?
- ¿Cuál es la razón para diseñarlo de esta manera?
Dado que la recompensa va a expirar, acepté la respuesta más votada. Pero no proporciona una respuesta a las preguntas anteriores.
Los valores en y
son matrices no indexadas. El caso x[''A''] = y
funciona aquí ya que toma el primer elemento de la matriz y lo asigna a la ''A''
.
Similar,
x = pd.DataFrame(np.zeros((4, 2)), columns=[''A'', ''B''])
y = np.random.randn(4, 2)
x[[''A'', ''B'']] = y
También funcionará porque los datos adicionales están siendo descartados por los pandas. Si estás tratando de pasar menos columnas, di:
x = pd.DataFrame(np.zeros((4, 2)), columns=[''A'', ''B''])
y = np.random.randn(4, 1)
x[[''A'', ''B'']] = y
Eso también funcionará, ya que asignará los mismos valores a ambas columnas. Este caso es similar a x[''A''] = 0
que reemplazará todos los datos en la columna A
con ceros.
para
x = pd.DataFrame(np.zeros((4, 1)), columns=[''A''])
y = np.random.randn(4, 2)
si x [''A''] = y, entonces la columna se replica y si la iteramos con diferentes longitudes de columna, tales como:
x = pd.DataFrame(np.zeros((4, 3)), columns=[''A'',''B'',''C''])
y = np.random.randn(4, 2)
e intente x [''A''] = y luego también se replica la primera columna, pero si igualamos x = y, entonces el marco de datos x se replica con la matriz y. Así que supongo que estamos obteniendo esta ambigüedad ya que estamos tratando de equiparar una columna de marco de datos con un matix creado en numpy. Espero que explique