首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据日期条件删除行

根据日期条件删除行
EN

Stack Overflow用户
提问于 2019-12-13 14:59:39
回答 2查看 2.1K关注 0票数 1

我有一个名为new的Pandas DataFrame,其中YearMonth列的日期格式为YYYY-MM.。我想删除基于以下条件的行:如果日期超过"2020-05“。我试着使用这个:

代码语言:javascript
复制
new = new.drop(new[new.YearMonth>'2020-05'].index)

但是显示语法错误"invalid token“是行不通的。

下面是一个示例DataFrame:

代码语言:javascript
复制
>>> new = pd.DataFrame({
    'YearMonth': ['2014-09', '2014-10', '2020-09', '2021-09']
})
>>> print(new)
    YearMonth
0   2014-09
1   2014-10
2   2020-09
3   2021-09

丢弃后的预期DataFrame应为:

代码语言:javascript
复制
    YearMonth
0   2014-09
1   2014-10
EN

回答 2

Stack Overflow用户

发布于 2019-12-13 15:44:40

只需转换为datetime,然后将其格式化为month并对其进行子集。

代码语言:javascript
复制
from datetime import datetime as dt

new['YearMonth']=pd.to_datetime(new['YearMonth']).dt.to_period('M')
new=new[~(new['YearMonth']>'2020-05')]
票数 1
EN

Stack Overflow用户

发布于 2019-12-13 15:05:15

我认为你需要将>改为<=boolean indexing,这样按月比较会更好:

代码语言:javascript
复制
new = pd.DataFrame({
    'YearMonth': pd.to_datetime(['2014-09', '2014-10', '2020-09', '2021-09']).to_period('m')
})
print (new)
  YearMonth
0   2014-09
1   2014-10
2   2020-09
3   2021-09

df = new[new.YearMonth <= pd.Period('2020-05', freq='m')]
print (df)
  YearMonth
0   2014-09
1   2014-10

在最新版本的pandas中,也可以使用compare by字符串:

代码语言:javascript
复制
df = new[new.YearMonth <= '2020-05']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59317601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档