2017-10-10 2 views
0

Ci-dessous est une boucle for que j'écris, mais il continue à retourner une erreur. Ne peux pas comprendre comment corriger l'erreur. Je pense que cela a à voir avec l'instruction if mais je ne sais pas quoi corriger.Boucle traversant la colonne dans l'élément de données avec python TypeError: len() de l'objet non dimensionné

TypeError: len() de l'objet non collé

for i in df_py['Type']: 
    if i == df_stroke['Type']: 
     print True 
    elif i != df_stroke['Type']: 
     print False 

Mon objectif principal est de comparer les deux dataframes dans leur valeur respective dans 'Type'. Chaque dataframe a des valeurs similaires mais je souhaite faire une boucle pour automatiser le processus. Comparer les deux valeurs puis renvoyer une déclaration vraie ou fausse pour me dire si elles correspondent.

print(type(df_py['Type'].values[0])) 
print(type(df_stroke['Type'].values[0])) 

Renvoie: de type 'numpy.int64', tapez 'numpy.int64'

Les deux sont du même type.

> 2  if i == df_stroke['Type']: 
    3   print True 
    4  elif i != df_stroke['Type']: 
    5   print False 

/usr/local/lib/python2.7/site-packages/pandas/core/ops.pyc à enveloppe (self, d'autre part, l'axe) 739 retour NotImplemented

740   elif isinstance(other, (np.ndarray, pd.Index)): 

- -> 741 si len (auto) = len (autre):

742     raise ValueError('Lengths must match to compare') 

743    return self._constructor(na_op(self.values,np.asarray(other)), 

TypeError: len() de l'objet non collé

+0

L'erreur que vous montrez ne semble pas provenir du code que vous avez partagé ... – Julien

+0

Et d'ailleurs, vous pouvez faire plus concis 'print i == swim_df_stroke ['Type']' au lieu du bloc inutile. .. – Julien

+0

l'erreur provient de la boucle. – DoubleFlow

Répondre

0

Essayez!.

# generate some example data. 
import numpy as np 
import pandas as pd 

N = 10 
values = ['a','b','c'] 
df1 = pd.DataFrame({"Type": np.random.choice(values, size=N)}) 
df2 = pd.DataFrame({"Type": np.random.choice(values, size=N)}) 

eq donne la comparaison élément par élément:

df1.Type.eq(df2.Type) 

0 False 
1 False 
2 False 
3 False 
4 False 
5 False 
6 False 
7 False 
8 False 
9  True 
Name: Type, dtype: bool 
+0

Cela fonctionne! Merci – DoubleFlow

+0

De rien! Si cela a résolu votre question, veuillez la marquer en cliquant sur la coche à gauche de la réponse. –

0

Le segment for i in df_py['Type'] itère df_py['Type'] et à i ayants droit. Cependant, tout en le comparant, vous comparez un élément de df_py['Type'] qui est i à l'ensemble de la base de données df_stroke['Type'].

Vous n'avez pas spécifié exactement ce que vous essayez d'obtenir avec votre code, donc je vous suggère de changer df_stroke['Type'] en df_stroke['Type'][<some index>] ou d'utiliser les diverses autres opérations de données pour effectuer les comparaisons.