python-2.7 - index - python dataframe where example
Pandas Dataframe ValueError: la forma de los valores pasados es(X,), los índices implican(X, Y) (2)
Recibo un error y no estoy seguro de cómo solucionarlo.
Lo siguiente parece funcionar:
def random(row):
return [1,2,3,4]
df = pandas.DataFrame(np.random.randn(5, 4), columns=list(''ABCD''))
df.apply(func = random, axis = 1)
y mi salida es:
[1,2,3,4]
[1,2,3,4]
[1,2,3,4]
[1,2,3,4]
Sin embargo, cuando cambio una de las columnas a un valor como 1 o Ninguno:
def random(row):
return [1,2,3,4]
df = pandas.DataFrame(np.random.randn(5, 4), columns=list(''ABCD''))
df[''E''] = 1
df.apply(func = random, axis = 1)
Me sale el error:
ValueError: Shape of passed values is (5,), indices imply (5, 5)
He estado luchando con esto por unos días y nada parece funcionar. Lo interesante es que cuando cambio
def random(row):
return [1,2,3,4]
a
def random(row):
print [1,2,3,4]
Todo parece funcionar normalmente.
Esta pregunta es una forma más clara de hacer esta pregunta , que creo que puede haber sido confusa.
Mi objetivo es calcular una lista para cada fila y luego crear una columna a partir de eso.
EDITAR: originalmente comienzo con un marco de datos que tiene una columna. Agrego 4 columnas en 4 pasos de aplicación de diferencia, y luego, cuando intento agregar otra columna, aparece este error.
Si su objetivo es agregar una nueva columna a DataFrame, simplemente escriba su función como función que devuelve un valor escalar (no en la lista), algo como esto:
>>> def random(row):
... return row.mean()
y luego usar aplicar:
>>> df[''new''] = df.apply(func = random, axis = 1)
>>> df
A B C D new
0 0.201143 -2.345828 -2.186106 -0.784721 -1.278878
1 -0.198460 0.544879 0.554407 -0.161357 0.184867
2 0.269807 1.132344 0.120303 -0.116843 0.351403
3 -1.131396 1.278477 1.567599 0.483912 0.549648
4 0.288147 0.382764 -0.840972 0.838950 0.167222
No sé si es posible que su nueva columna contenga listas, pero sin duda es posible contener tuplas ( (...)
lugar de [...]
):
>>> def random(row):
... return (1,2,3,4,5)
...
>>> df[''new''] = df.apply(func = random, axis = 1)
>>> df
A B C D new
0 0.201143 -2.345828 -2.186106 -0.784721 (1, 2, 3, 4, 5)
1 -0.198460 0.544879 0.554407 -0.161357 (1, 2, 3, 4, 5)
2 0.269807 1.132344 0.120303 -0.116843 (1, 2, 3, 4, 5)
3 -1.131396 1.278477 1.567599 0.483912 (1, 2, 3, 4, 5)
4 0.288147 0.382764 -0.840972 0.838950 (1, 2, 3, 4, 5)
Yo uso el código de abajo, está bien
import numpy as np
df = pd.DataFrame(np.array(your_data), columns=columns)