2013-06-12 29 views
11

ho i seguenti dati importati da un file CSV utilizzando panda read_csv:filtrare un dataframe panda in base al valore della data

instrument   type from_date to_date 
0 96000001 W/D & V/L 19951227 19960102 
1 96000002 DEED TRUST 19951227 19960102 
2 96000003 WARNTY DEED 19951228 19960102 
3 96000004 DEED TRUST 19951228 19960102 
4 96000005 W/D & V/L 19951228 19960102 

Vorrei selezionare le righe che corrispondono a una data o intervallo di date. Ad esempio voglio selezionare solo quelle righe con la data 19951227 nella colonna from_date o selezionare giorni che vanno da from_date di 19951227 a to_date19960102.

Come faccio?

risposta

8

Selezionare quelli con una colonna specifica:

In [11]: df[df['from_date'] == 19951227] 
Out[11]: 
    instrument  type from_date to_date 
0 96000001 W/D & V/L 19951227 19960102 
1 96000002 DEED TRUST 19951227 19960102 

o combinare diverse query (è possibile utilizzare | a favore o)

In [12]: df[(19951227 <= df['from_date']) & (df['to_date'] <= 19960102)] 
Out[12]: 
    instrument   type from_date to_date 
0 96000001 W/D & V/L 19951227 19960102 
1 96000002 DEED TRUST 19951227 19960102 
2 96000003 WARNTY DEED 19951228 19960102 
3 96000004 DEED TRUST 19951228 19960102 
4 96000005 W/D & V/L 19951228 19960102 

pena notare che queste colonne non sono oggetti datetime/timestamp. ..

Per convertire queste colonne in data e ora è possibile utilizzare:

In [21]: pd.to_datetime(df['from_date'].astype(str)) 
Out[21]: 
0 1995-12-27 00:00:00 
1 1995-12-27 00:00:00 
2 1995-12-28 00:00:00 
3 1995-12-28 00:00:00 
4 1995-12-28 00:00:00 
Name: from_date, dtype: datetime64[ns] 

In [22]: df['from_date'] = pd.to_datetime(df['from_date'].astype(str)) 

In [23]: pd.to_datetime(df['from_date'].astype(str)) # do same for to_date 

e query tramite stringa rappresentazione della data:

In [24]: df['1995-12-27' == df['from_date']] 
Out[24]: 
    instrument  type   from_date to_date 
0 96000001 W/D & V/L 1995-12-27 00:00:00 19960102 
1 96000002 DEED TRUST 1995-12-27 00:00:00 19960102 
+8

Andy Hayden, pistole più veloci del west. –

+2

http://en.wikipedia.org/wiki/The_Typing_of_the_Dead –

+0

Cosa ne pensi di fare qualcosa come df ['1995-12-27'> = df ['from_date'] & df ['1997-12-27' <= df ['from_date']]? – Aidis

Problemi correlati