J'ai du code qui fonctionne sur un cron (via Kubettes) depuis plusieurs mois maintenant.
hier, une partie de mon code n'a pas fonctionné normalement: P>
Cette déclaration, tous Un soudain, n'était pas "vrai" (df_temp4 et df_temp4 ont des données en eux: p> Cependant, cela a fonctionné: p> if ( len(df_temp > 0) and len(df_temp4 > 0)):
print "HERE"
4 Réponses :
Vous avez remplacé l'opérateur de bit à mal appliqué Tout d'abord, vous devez utiliser Opérateur Essayez ce qui suit dans Python. p> & code> avec l'opérateur logique code> approprié et code>. et code> parce que Ce que vous voulez vraiment, c'est une expression logique avec des opérateurs logiques. P> & code> Échec de l'échéance lorsque les longueurs n'avaient pas de bits courants. P>
Plus spécifiquement, je suis confus pourquoi cette déclaration: df_temp = df [(df.funding_date> = recommencer_of_month) & (df.funding_date <= hier) & (df.state! = 'mo') - a besoin d'un "&" opérateur mais la déclaration IF nécessite un "et" opérateur "
Logiquement, les deux déclarations sont différentes. L'opérateur et indiquez Bitwise. Le et indique un logique et. P>
Ils ont un comportement complètement différent. de
Lorsque vous utilisez et code>, vous comparez des valeurs booléennes, mais lorsque vous utilisez & code>, vous êtes élément logique logique et. Je vous suggère de lire cette réponse complète pour en savoir plus.
opérateur logique de l'indexation booléenne en pandas import pandas as pd
dfa = pd.DataFrame([True, False])
dfb = pd.DataFrame([False, False])
print(dfa & dfb)
# 0
# 0 False
# 1 False
print(dfa and dfb)
# ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Votre réponse n'est pas correcte. Si vous voulez que l'élément-sage logique - et en pandas, veuillez utiliser l'opérateur Binary effectue
Le donc le différence entre "&" et "et" p>
blockQuote> Ils signifient différentes choses: p> Depuis que vous avez demandé spécifiquement des pandas (en supposant qu'au moins un opérande est une matrice numpue, une série Pandas ou des pandas Dataframe): P> Pour plus d'explication, vous pouvez vous référer à " différence entre "et" (booléen) vs. & "(Bitwise) en python. Pourquoi la différence de comportement avec des répertorie des tableaux VS NUMPY?" P> Vous ne savez pas ce que cette déclaration échoue tout d'un coup. P>
blockQuote> Vous n'avez pas fourni l'échec ni le comportement attendu, je ne peux malheureusement pas vous aider là-bas. P> P> len (df_temp> 0) code> et len (df_temp4> 0) code> probablement ne fais pas ce que vous attendez. Les opérateurs de comparaison avec Pandas DataFrames Renvoi d'éléments d'élément-sage, cela signifie qu'ils créent un fichier de données booléen dans lequel chaque valeur indique si la valeur correspondante dans le Dataframe est supérieure à zéro: len code> de df code> est identique à celui de len code> de df> 0 code>: p>
& code> est Bitwise et Li>
et code> est logique et (et court-circuit) li>
ul>
& code> fait également référence à l'élément-wise "bitwise et". li>
et code> mais il faut utiliser une fonction, c'est-à-dire numpy.logical_et code> . Li>
ul>
Je suppose que leurs longueurs n'avaient pas de bits qui se chevauchent cette fois-ci.
Que veux-tu dire par là? @tkausl
Eh bien,
& code> est le Bitwise b> et opérateur.Étrange qu'il a toujours fonctionné - la syntaxe appropriée doit donc utiliser "et"?
Incidemment, est
len (df_temp> 0) code> destiné à compter le nombre de valeurs positives dansdf_temp code>? Si tel est le cas, vous voulez probablement utiliser quelque chose comme(df_temp> 0) .sum () code> à la place.Sauf si vous voulez l'opération bitwise; Oui.
len (df_temp> 0) code> est utilisé pour vérifier si les données sont là@Derekkrantz: Dans ce cas, vous pouvez écrire
len (df_temp)> 0 code> ou même justelen (df_temp) code> - c'est-à-dire que votre condition doit êtresi len (df_temp) et len (df_temp4): code>