[ Foro de Python ]

Ejecutar una función para atributos especifico de un Dataframe

18-Nov-2017 03:30
Juan Cuevas
1 Respuestas

Hola amigos, mi duda es la siguiente:
cree un fichero csv y lo trabaje con pandas de la siguiente manera:
datos = pd.read_csv('practica_armero.csv', header=0, sep=None)
La descripción del fichero posee:
RangeIndex: 529 entries, 0 to 528
Data columns (total 13 columns):
Rodal                        529 non-null object
Especie                      529 non-null object
DAP(cm)                      525 non-null float64
Altura_Total_(m)             525 non-null float64
.......

Ahora bien, necesito calcular el volumen de cada árbol ejecutando un modelo alometrico. El problema consiste en que cada especie de arbol posee una un modelo diferente. Por lo tanto plantee la siguiente función:

def vol(Esp,DAP,HT):
   if Esp=='G_Arborea':
       volumen = (0.0228 + 0.00015*(DAP**2.1639)*(HT**1.0327))
   else:
       volumen = (0.01704 + 0.0000364*(DAP**2)*HT-0.0001989*(DAP**2))
   return volumen
datos['Volumen']=vol(datos['Especie'],datos['DAP(cm)'],datos['Altura_Total_(m)'])

Pensaba que la función discriminaría cada árbol, lo que haria que aplicara uno de los dos modelos planteados. El primero si es de la especie G_Arborea y el segundo de T_Grandis, el problema es que me da este mensaje de error:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Muchas gracias Por su ayuda


20-Nov-2017 22:38
Nacho Cabanes (+83)

Lo siento, pero no puedo ayudarte. Ni siquiera sé de donde sale ese "read_csv" (¿pydata? ... edito, ya he visto que "pandas", pero no lo he utilizado) y es un problema tan específico que lo único que puedo decirte es que depures (si tu entorno lo permite) o añadas "print" adicionales (en caso contrario) para ver qué valores tienen las variables a medida que te acercas al error. En ocasiones un error "extraño" como ese se da sólo en la última línea del fichero, en la que realmente no hay más datos que analizar.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)