我有一个名为new
的Pandas DataFrame,其中YearMonth
列的日期格式为YYYY-MM。我想根据以下条件删除行:如果日期超出“ 2020-05”。我尝试使用此:
new = new.drop(new[new.YearMonth>'2020-05'].index)
,但无法显示语法错误“无效令牌”。
这是一个示例数据框:
>>> 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应该是:
YearMonth
0 2014-09
1 2014-10
答案 0 :(得分:1)
只需将其转换为日期时间,然后将其格式化为月份并将其子集化即可。
from datetime import datetime as dt
new['YearMonth']=pd.to_datetime(new['YearMonth']).dt.to_period('M')
new=new[~(new['YearMonth']>'2020-05')]
答案 1 :(得分:0)
我认为您希望将>
更改为<=
的{{3}},所以按月份比较效果很好:
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
在最新版本的熊猫中,还可以通过字符串进行比较:
df = new[new.YearMonth <= '2020-05']