2016-07-07 11 views
-1

Ich verfolge meine previous question.CSV-importierte Datenrahmen zusammenführen/verketten und Duplikate löschen

Haben Sie eine Schleife aussortiert, um CSVs zu importieren, Daten zu verketten und Duplikate zu entfernen.

files = glob.glob('./A08_csv/A08_B1_T*.csv') 
dfs = [pd.read_csv(fp, index_col=[0], parse_dates=[0], dayfirst=True) for fp in files] 
df = pd.concat(dfs) 

df_purged = df.drop_duplicates(inplace=True) 
print df_purged 

jedoch df.drop_duplicates (Inplace = True) funktioniert nicht (sicher ich bin etwas fehlt) und drucken eine Leere zurück. Wie kann ich angeben, die Duplikate nach Index zu überprüfen? Das Hinzufügen des Spaltennamens scheint nicht zu funktionieren.

Auch, wie kann ich diese Schleife in eine Formel transformieren, so kann ich diese rekursive Eingabe in CSV mit verschiedenen Dateinamen (dh etwas, das für A08_B1_T * .csv (Schlafzimmer) und für A08_KI_T * .csv (Küche) etc.)?

Antwort

1

Verstehen Sie die inplace = True Option?

Wenn Sie es tun inplace, bedeutet dies, dass Sie df ändern, also stellen Sie die Werte nicht auf df_purged.

Sie haben hier zwei Lösungen: Entweder Sie wollen die ‚unbereinigte‘ Datenrahmen zu halten und Sie tun:

df_purged = df.drop_duplicates() 

Entweder Sie kümmern sich nicht um sie zu halten, und Sie tun:

df.drop_duplicates(inplace = True) 

Erste Option Ihr Ergebnis Datenrahmen wird df_purged sein, aber in der Sekunde wird es df sein, die gelöscht werden, da Sie es inplace durchgeführt haben.

aber sagen, dass, wenn Sie auf Ihrem Index löschen möchten, wenn Sie es nicht halten müssen, Sie reset_index und dann drop_duplicates wie folgt aus:

df_purged = df.reset_index().drop_duplicates(['index']).drop('index',1) 

Und wenn Sie das halten müssen Index (modulo die abgelegten Linien):

df_purged = df.reset_index().drop_duplicates(['index']).set_index('index') 
del df.index.name 

(Beachten sie, dass wieder einmal den Indexnamen zu löschen ist hier nur aus ästhetischen)

1

Würde dies helfen?

df.drop_duplicates(['col_name']) 

Hier ist eine Lösung, die den Index als Datenrahmen Spalte fügt hinzu, fällt Duplikate auf, dass dann die neue Spalte entfernt:

df= df.reset_index().drop_duplicates(subset='Date', 'Time', keep='last').set_index(subset='Date', 'Time') 
+0

Sicherlich wäre es (und ich versuchte es), aber die proble m Ich möchte, dass die Duplikate basierend auf dem Index (Datum und Uhrzeit) identifiziert werden und nicht wissen, wie man den Index anstelle von 'col_name' verwendet. Wenn ich tippe: 'df.drop_duplicates (['Date Time'])' was ist der Spaltenname auf der CSV, dann bekomme ich einen Key Error – Andreuccio

+0

lassen Sie mich wissen, wenn die Bearbeitung funktioniert – SerialDev

+0

Cmari, vielen Dank dafür. Ich bekomme jetzt 'KeyError: 'index''. – Andreuccio