2017-06-09 1 views
0

Ich habe einen Fehler in der if-Anweisung und ich weiß nicht, wie ich diesen Fehler beheben kann, ich benutze Python 3.6 und Pandas zum Lesen, Schreiben und Datenanalyse.Python Pandas if-Anweisung Fehler

df1 = pd.read_csv("JonnyTheBoy10.csv", usecols=['ART_TIPO', 'ART_DESIG', 'PORTA', 'CP4', 'CP3', 'LOCALIDADE']) 
df2 = pd.read_csv("JonnyTheBoyFull.csv", usecols=['ART_TIPO', 'ART_DESIG', 'PORTA', 'CP4', 'CP3', 'LOCALIDADE']) 

    if df1["CP4"] == df2["CP4"] and df1["CP3"] == df2["CP3"] 

Ich habe diesen Fehler:

Traceback (most recent call last): 
    File "C:/Users/User01/Desktop/Normmm/Norm.py", line 11, in <module> 
    if df1["CP4"] == df2["CP4"] and df1["CP3"] == df2["CP3"]: 
    File "C:\anaconda\lib\site-packages\pandas\core\ops.py", line 818, in wrapper 
    raise ValueError(msg) 
ValueError: Can only compare identically-labeled Series objects 

Ich brauche Säulen unterschiedlicher csv-Dateien zu vergleichen, das Spiel zwischen ihnen zu bekommen und schließlich in einem anderen csv zu schreiben.

Voll Code für jetzt: https://pastebin.com/DTcTUV6M

+0

wahrscheinlich haben 'df1' und' df2' unterschiedliche Indizes. Wie möchten Sie diese Spalten in diesem Fall vergleichen? –

+4

Geben Sie ein minimales, vollständiges und überprüfbares Beispiel an (https://stackoverflow.com/help/mcve). Der Fehler besagt, dass die Serie, die Sie vergleichen, verschiedene Indizes hat. Setzen Sie auch Klammern, um jede logische Anweisung zu umbrechen. – FLab

+0

Ich wäre leichter zu beantworten, wenn Sie detaillierter gesagt hätten, was Sie erreichen möchten. – princelySid

Antwort

0

Ihre Frage nicht super klar, aber ich nehme an so etwas wie dies funktionieren würde:

dfx = df1[(df1['CP3'].isin(df2['CP3'])) & (df1['CP4'].isin(df2['CP4']))] 

Und dann läuft unabhängig von Funktion auf dfx.

+0

Erhalten Sie diesen Fehler: Traceback (jüngste Aufforderung zuletzt): Datei "C: /Users/User01/Desktop/Normmm/Norm.py", Zeile 16, in wenn dfx: Datei „C: \ anaconda \ lib \ site-packages \ pandas \ core \ generic.py ", Zeile 953, in __nonzero__ .format (self .__ Klasse __.__ name__)) ValueError: Der Wahrheitswert eines DataFrames ist mehrdeutig. Verwenden Sie a.empty, a.bool(), a.item(), a.any() oder a.all(). –

+0

Probieren Sie mein Update tatsächlich, ich denke, es wird Ihnen geben, was Sie wollen. Aber pro @ princelySid, was Sie als nächstes mit den Daten tun, würde die Antwort besser zu diesem Schritt führen. – pshep123

+0

Datei "C: /Users/User01/Desktop/Normmm/Norm.py", Zeile 12, in dfx = df1.loc [(df1 ['CP3']. Isin (df2 ['CP3'])) & (df1 ['CP4']. isin (df2 ['CP4']))] Datei "C: \ anaconda \ lib \ site-Pakete \ pandas \ core \ series.py", Zeile 2555, in isin result = algorithm.isin (_values_from_object (self), Werte) Datei "C: \ anaconda \ lib \ site-Pakete \ pandas \ core \ algorithm.py", Zeile 421, in isin Rückgabe f (comps, Werte) –

0

Sie benötigen die Serie Sie vergleichen sind gleicher Größe zu gewährleisten.

Wenn die verglichenen Serien diktierte Daten sind, stellen Sie sicher, dass alle die gleichen Schlüssel (Labels) haben.

Beispiel:

pd.Series([1,2,3,4]) == pd.Series([4,3,2,1,5]) 
ValueError: Can only compare identically-labeled Series objects 

pd.Series({'a':1, 'b':2}) == pd.Series({'a':2, 'c':3}) 
ValueError: Can only compare identically-labeled Series objects