0
votes

différence entre "&" et "et" en pandas

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> xxx pré>

Cependant, cela a fonctionné: p>

if ( len(df_temp > 0) and len(df_temp4 > 0)):
    print "HERE"


8 commentaires

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, & est le Bitwise et opérateur.


Étrange qu'il a toujours fonctionné - la syntaxe appropriée doit donc utiliser "et"?


Incidemment, est len (df_temp> 0) destiné à compter le nombre de valeurs positives dans df_temp ? Si tel est le cas, vous voulez probablement utiliser quelque chose comme (df_temp> 0) .sum () à la place.


Sauf si vous voulez l'opération bitwise; Oui.


len (df_temp> 0) est utilisé pour vérifier si les données sont là


@Derekkrantz: Dans ce cas, vous pouvez écrire len (df_temp)> 0 ou même juste len (df_temp) - c'est-à-dire que votre condition doit être si len (df_temp) et len ​​(df_temp4):


4 Réponses :


0
votes

Vous avez remplacé l'opérateur de bit à mal appliqué & avec l'opérateur logique approprié et .

Tout d'abord, vous devez utiliser et parce que Ce que vous voulez vraiment, c'est une expression logique avec des opérateurs logiques.

Opérateur & Échec de l'échéance lorsque les longueurs n'avaient pas de bits courants.

Essayez ce qui suit dans Python. xxx


1 commentaires

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 "



0
votes

Logiquement, les deux déclarations sont différentes. L'opérateur et indiquez Bitwise. Le et indique un logique et.


0 commentaires

2
votes

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().


1 commentaires

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



4
votes

Le len (df_temp> 0) et len (df_temp4> 0) 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: xxx

donc le len de df est identique à celui de len de df> 0 : xxx

différence entre "&" et "et"

Ils signifient différentes choses:


0 commentaires