2016-09-29 6 views
0

Ich versuche, die Indizierung zu verwenden, um Zeilen in meinem Dataframe nach dem Datum 2011-01-01 auszuwählen. Ich habe folgende Codezeile nur einen Teil des Datenrahmen zurück, die nach 2011-01-01 istPython Pandas datetime64 [ns] Vergleich

df = df[df.Date > np.datetime64('2011-01-01 00:00:00')] 

Ich habe keinen Fehler. Allerdings sehe ich nur Daten, die von 2016 Jahr nichts auf 2011 sind. Wenn ich Datei manuell öffne, kann ich sehen, dass es viele Einträge beginnend mit 2011 Jahr gibt.

Was mache ich hier falsch? Irgendwelche Ideen?

Danke!

Hier wird ein Datum sniped: enter image description here

+0

Bitte teilen Sie ein Schnipsel der Daten in 'df'; vorzugsweise Zeilen mit Daten vor und nach '2011-01-01'. – Abdou

+0

Ich habe gerade meinen Post bearbeitet, um Datenschnipsel einzuschließen. Es ist ein langer Datensatz und ein nicht konsistentes Datum. Mir ist aufgefallen, dass ich, wenn ich .sort_index auf meinen Datenrahmen anwende, immer noch nur Ergebnisse für 2016 am Kopf und am Ende des Datenrahmens sehe. – semenoff

+0

Ich kann das Bild nicht zum Testen Ihres Codes verwenden. Es sollten Daten sein, die jeder hier in seine Python-Konsolen kopieren und einfügen kann, um Ihren Code zu testen. Versuchen Sie es mit [pastebin] (http://pastebin.com/), um die Daten dort einzufügen und den Link anschließend zu teilen. – Abdou

Antwort

0

Nach dem Importieren von Daten, es sieht aus wie alle Werte der Spalte Date noch da sind, auch nach der Filterung. Es ist nur so, dass Ihre Daten zu groß sind, um vollständig auf Ihrer Konsole angezeigt zu werden (werfen Sie einen Blick auf pandas settings). Daher wird ein Teil davon (optisch) abgeschnitten, um auf die Seite zu passen.

Der Trick zu verwenden, um die Date Spalte zu einem Objekt Pandas Datetime konvertieren und die Filterung von dort handhaben:

import pandas as pd 

df = pd.read_csv('Crimes_-_2001_to_present.csv', header = 0) 
df.Date = pd.to_datetime(df.Date) 

filterer = df.Date > pd.to_datetime('2011-01-01 00:00:00') 
df = df[filterer] 

Wenn Sie nun an der 200. Zeile in der Spalte Date aussehen, sollten Sie etwas bekommen:

df['Date'].iloc[200] 
#Timestamp('2011-05-31 19:30:00') 

in Zeile 2000 in der Spalte Date:

df['Date'].iloc[2000] 
#Timestamp('2013-09-19 20:45:00') 

Im Grunde ist alles da. Ihre Konsole ist vielleicht zu klein, um zu allem zu passen.

Ich hoffe, das hilft.

+0

Danke Abdou! Ich dachte, die Daten für 2011 könnten irgendwo in der Mitte der gefilterten Daten liegen. Ich war frustriert, als ich sort_index benutzte und es nicht sah. Dies ist der Code, den ich zum Sortieren verwendet habe: ** df = df.sort_index (axis = 0) ** – semenoff

+0

Sie hätten 'df.sort_values ​​(by =' Date ') '' verwenden sollen, da 'Date' eine Spalte ist und nicht der Index. – Abdou

+0

Danke Abdou! Es hat funktioniert. – semenoff

Verwandte Themen