根据日期值过滤pandas Dataframe

bla*_*_13 11 date pandas

我使用pandas从csv文件导入以下数据read_csv:

 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
Run Code Online (Sandbox Code Playgroud)

我想选择那些符合日期或日期范围的行.比如我想用日期,只选择那些排19951227from_date列或选择天,范围从from_date19951227to_date 19960102.

我该怎么做?

And*_*den 8

选择具有特定列的那些:

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
Run Code Online (Sandbox Code Playgroud)

或组合几个查询(您可以使用|或)

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
Run Code Online (Sandbox Code Playgroud)

值得注意的是,这些列不是datetime/Timestamp对象......

要将这些列转换为时间戳,您可以使用:

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
Run Code Online (Sandbox Code Playgroud)

并通过字符串表示日期查询:

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
Run Code Online (Sandbox Code Playgroud)

  • 安迪海登,西部最快的枪支. (8认同)