基于日期值筛选Pandas数据框。

11

我使用 pandas 的 read_csv 方法从 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

我想选择符合日期或日期范围的行。例如,我只想选择那些from_date列中具有日期19951227的行,或选择从19951227from_date19960102to_date所在日期范围内的天数。

我应该怎么做?

1个回答

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

或者组合多个查询(您可以使用|表示或)

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

值得注意的是,这些列不是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

使用日期的字符串表示方式进行查询:

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,西部最快的枪手。 - Dan Allan
做类似于 df['1995-12-27' >= df['from_date'] & df['1997-12-27' <= df['from_date']] 这样的操作怎么样? - Aidis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接