Ich möchte Pandas in Python verwenden, um mehrere Dataframes durchzulaufen und nur Überschriften aus einer angegebenen keep_col-Liste zu behalten. Der Code führt zu einem Fehler, wenn ein DataFrame keine angegebene Überschrift enthält (KeyError: "['str2'] nicht im Index").Pandas, die DataFrames durchlaufen und nur Spaltenüberschriften beibehalten. Fehler Ergebnisse, wenn die angegebene Überschrift nicht im Datenrahmen ist
Der folgende pandas Code erstellt 2 Beispiel Datenrahmen mit unterschiedlichen Namen Spaltenüberschrift:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.randn(2,5), columns=('A','B','str1','str2','str3'))
df2 = pd.DataFrame(np.random.randn(2,3), columns=('A','B','str1'))
print df1
print df2
Ausgangsdatenrahmen
A B str1 str2 str3
-0.152686 0.189076 -1.079168 -0.823674 1.489668
-1.272144 0.694862 0.036248 0.319550 0.782666
A B str1
0.310152 1.302962 -0.284632
1.046044 0.090650 0.861716
Der folgende Code führt zu einem Fehler, weil 'str2' nicht in ‚DF2 ist ".
Wie kann dies geändert werden, um eine "keep_col" -Listenfolge zu ignorieren, wenn sie sich nicht in einer DataFrame-Überschrift befindet?
#delete columns
keep_col = ['A','str2'] #need code here to ignore 'str2' when generating 'df2'
new_df1 = df1[keep_col]
new_df2 = df2[keep_col]
print new_df1
print new_df2
Dies ist die gewünschte Ausgabe:
A str2
-0.152686 -0.823674
-1.272144 0.319550
A
0.310152
1.046044
diesem Beispiel der Einfachheit halber ist. Ich werde mehr als 100 CSV-Dateien durchlaufen, um nur bestimmte Spalten zu behalten.
Danke für die schnelle Antwort! Obwohl dies mein Posted-Beispiel gelöst hat, brauche ich die Regex, um genau übereinzustimmen, anstatt die Zeichenfolge 'Wenn enthält'. Ich versuchte r '(?:) \ B (A | str2) \ b', aber das funktionierte nicht für meine eigentliche Anwendung, da ich mehrere Überschriften habe, die sehr ähnlich sind, aber sich nur durch ein Zeichen oder Interpunktion unterscheiden. –
@ JordanChristian, ich habe meine Antwort aktualisiert - bitte überprüfen Sie – MaxU
Das funktioniert. Vielen Dank! –