2016-04-22 13 views
2

Betrachten Sie den Datenrahmen data:Slicing einen Datenrahmen

    one two three four 
Ohio  2013-01-01 1  2  3 
Colorado 2014-01-05 5  6  7 
Utah  2015-05-06 9  10 11 
New York 2016-10-11 13  14 15 

ich nur das Kriterium mit der Zeile extrahieren mag, dass das Jahr ein bestimmtes Jahr ist, zum Beispiel so etwas wie . Aber der Befehl data['one'][:][0:4] kehrt

Ohio  2013-01-01 
Colorado 2014-01-05 
Utah  2015-05-06 
New York 2016-10-11 
Name: one, dtype: object 

Ich dachte, das das Richtige ist, weil der Befehl data['one'][0][0:4] kehrt

'2013' 

zu tun Warum der Unterschied, und was ist der richtige Weg, dies zu tun?

Antwort

4

Seit Spalte 'one' der Daten besteht, wäre es am besten zu haben Pandas sie als solche erkennen, anstatt sie als Strings erkennen Sie pd.to_datetime dies zu tun, verwenden können:..

df['one'] = pd.to_datetime(df['one']) 

auf diese Weise können Sie auf Datum Eigenschaften filtern, ohne Saiten zu schneiden kümmern braucht zum Beispiel können Sie Überprüfen Sie das Jahr mit Series.dt.year:

df['one'].dt.year == 2013 

In Kombination mit loc ermöglicht es Ihnen, alle Zeilen zu erhalten, wo das Jahr 2013:

df.loc[df['one'].dt.year == 2013, :] 
0

Die Bedingung Sie suchen, ist

df['one'].str[0:4] == "2013" 

Grundsätzlich müssen Sie Pandas sagen, Ihre Spalte als String zu lesen, dann arbeiten auf den Saiten aus dieser Spalte.

Die Art und Weise Sie es (df['one'][:]) geschrieben haben, sagt: „Gib mir die Spalte mit dem Namen‚eins‘, dann geben Sie mir alle von ihnen [:].

+0

will er die ganze Reihe I glauben –

0

query arbeitet auf Spalten Datumzeit gut zu out

In [13]: df.query('one == 2013') 
Out[13]: 
      one two three four 
Ohio 2013-01-01 1  2  3