query index iloc example columns python-2.7 pandas ipython dataframe

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)