2017-09-28 4 views
0
def time_constant_values(time_value, df, band_list): 
     try: 
      time_value in df.index 
     except KeyError: 
      print('The time value does not exist!') 
     else: 
      constants = [] 
      for band in band_list: 
       constants.append(df.loc[time_value][band]) 
      t0_dict = dict(zip(band_list, constants)) 
      return t0_dict 

La zone de données pandas contient des valeurs temporelles dans son index au format hh: mm: ss. Qu'est-ce que je fais de mal dans l'essai, sauf une partie? J'essaie d'accéder à la ligne de temps spécifique pour certaines colonnes et ensuite de former un dictionnaire avec des étiquettes de colonne en tant que clés et les valeurs de données en tant que valeurs.Recherche d'un index pour une valeur dans une trame Phasas

MERCI !!

+0

Je vois beaucoup de choses ici, d'abord ce que vous essayez de faire dans votre bloc try, et il y a une instruction else sans si. – bhansa

+2

@bhansa La partie else est correcte (syntaxe python valide), il y a d'autres problèmes ... –

+0

Veuillez accepter une réponse si vous l'avez trouvé utile, et respectez une réponse s'il vous plaît. Merci. –

Répondre

2

La non-existence d'une clé ne lance pas KeyError. Il renvoie simplement False. Le else est toujours exécuté, et vous aurez des problèmes lors de l'indexation sur une clé inexistante alors. Essayez d'utiliser un if:

def time_constant_values(df, time_value, band_list): 
    if time_value in df.index: 
     return df.loc[time_value, band_list].to_dict() 
+0

Lorsque j'essaie d'appeler la fonction avec votre code, j'obtiens "KeyError: '10: 28: 00 '" même si je sais que c'est une valeur dans l'index. Est-ce que cela fait une différence que mes valeurs d'index sont des objets timedelta? @COLDSPEED –

+1

@Brain_overflowed ne devrait pas. J'espère que votre code est exactement comme décrit dans ma réponse. Si oui, essayez de convertir 'time_value' en timedelta. –