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.

Python: Mensaje de error: ValueError: El valor de verdad de una Serie es ambiguo. Use a.empty, a.bool(), a.item(), a.any() o a.all()

Estoy llamando a la siguiente función con parámetros. Los parámetros son claves para algunos Dataframes específicos, almacenados en un diccionario llamado: iNms.

Mi función actualmente se ve así:

Pero recibo el siguiente mensaje de error:

Cuando imprimo el lado izquierdo, obtengo un “0” y del lado derecho obtengo un “False”. Creo que por lo tanto no funciona. Ya intenté convertir la condición del lado derecho, pero el error persiste.

¿Tienes alguna pista para mí? Soy completamente nuevo en Python (1-2 semanas), solo tengo algunos conocimientos teóricos, así que trato de resolver mi problema yo mismo para tener una experiencia de aprendizaje.

Ahora con mi código y mensaje de error como texto

En el primer intento, lo intenté así:

def check_missing_values(name):
    if name in iNms:
        if  iNms[name].iloc[:,[0]].isnull().sum() == 0 and len(name)<8:
            print('hurra')
            with open('Log.txt','a') as w:
                    w.write('\n{}\t\t\tKeine fehlenden Primärschlüssel\tOK'.format(name))
        elif iNms[name].iloc[:,[0]].isnull().sum() == 0 and 18>=len(name)>=8:
            print('hurra2')
            with open('Log.txt','a') as w:
                    w.write('\n{}\t\tKeine fehlenden Primärschlüssel\tOK'.format(name))
        elif iNms[name].iloc[:,[0]].isnull().sum() != 0 and len(name)<8:
            print('hurra3')
            with open('Log.txt','a') as w:
                    w.write('\n{}\t\t\tEinige oder mehrere Primärschlüssel fehlen. Nicht OK. Nacharbeiten!'.format(name))
        elif iNms[name].iloc[:,[0]].isnull().sum() !=0 and 18>=len(name)>=8:
            print('hurra4')
            with open('Log.txt','a') as w:
                    w.write('\n{}\t\tEinige oder mehrere Primärschlüssel fehlen. Nicht OK. Nacharbeiten!'.format(name))
    else:
        with open('Log.txt','a') as w:
            if len(name)<17:
                w.write('\n{}\t\tnicht angeliefert'.format(name))
            else:
                w.write('\n{}\tnicht angeliefert'.format(name))

print('Izquierda:',iNms['transaction'].iloc[:,2].isnull().sum())
print('Izquierda:',type(iNms['transaction'].iloc[:,2].isnull().sum()))
print('Derecha:',len('transaction')<8)
print('Derecha:',type(len('transaction')<8))

Mi segundo intento

def check_missing_values(name):
    if name in iNms:
        if  (iNms[name].iloc[:,[0]].isnull().sum() == 0) & (len(name)<8):
            print('hurra')
            with open('Log.txt','a') as w:
                    w.write('\n{}\t\t\tKeine fehlenden Primärschlüssel\tOK'.format(name))
        elif (iNms[name].iloc[:,[0]].isnull().sum() == 0) & (18>=len(name)>=8):
            print('hurra2')
            with open('Log.txt','a') as w:
                    w.write('\n{}\t\tKeine fehlenden Primärschlüssel\tOK'.format(name))
        elif (iNms[name].iloc[:,[0]].isnull().sum() != 0) & (len(name)<8):
            print('hurra3')
            with open('Log.txt','a') as w:
                    w.write('\n{}\t\t\tEinige oder mehrere Primärschlüssel fehlen. Nicht OK. Nacharbeiten!'.format(name))
        elif (iNms[name].iloc[:,[0]].isnull().sum() !=0) & (18>=len(name)>=8):
            print('hurra4')
            with open('Log.txt','a') as w:
                    w.write('\n{}\t\tEinige oder mehrere Primärschlüssel fehlen. Nicht OK. Nacharbeiten!'.format(name))
    else:
        with open('Log.txt','a') as w:
            if len(name)<17:
                w.write('\n{}\t\tnicht angeliefert'.format(name))
            else:
                w.write('\n{}\tnicht angeliefert'.format(name))

print('Izquierda:',iNms['transaction'].iloc[:,2].isnull().sum())
print('Izquierda:',type(iNms['transaction'].iloc[:,2].isnull().sum()))
print('Derecha:',len('transaction')<8)
print('Derecha:',type(len('transaction')<8))

Obtengo el siguiente mensaje de error:
“`
Left side: transactionts 0
dtype: int64
Left side:
Right side: False
Right side:
Traceback (most recent call last):
File “/home/tayfunuenver/Documents/Python/Parser2.py”, line 217, in
check_missing_values(‘customer’)
File “/home/tayfunuenver/Documents/Python/Parser2.py”, line 174, in check_missing_values
if iNms[name].iloc[:,[0]].isnull().sum() == 0 and len(name)<8: File "/home/tayfunuenver/.local/lib/python3.6/site-packages/pandas/core/generic.py", line 1330, in __nonzero__ f"The truth value of a {type(self).__name__} is ambiguous. " ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que el valor de verdad de un objeto de la Serie de Pandas es ambiguo. Esto significa que la condición en la declaración “if” no está construida correctamente.

    Basado en el código suministrado, parece que el problema radica en la condición iNms[name].iloc[:,[0]].isnull().sum() == 0 and len(name) < 8.

    Puede intentar el siguiente enfoque:
    – En lugar de usar el operador “and”, use “&” para comparar los dos valores.
    – Encierre cada condición en paréntesis para evitar problemas de precedencia de operadores.

    Esto resultaría en el siguiente código:

    if (iNms[name].iloc[:,[0]].isnull().sum() == 0) & (len(name) < 8):
        # your code here
    

    De manera similar, puede modificar las otras condiciones en consecuencia.

    Además, asegúrese de que el diccionario iNms esté correctamente definido y contenga los DataFrames con las claves especificadas.

Comments are closed.