在';Date&39;和';str';的实例之间不支持类型错误:';>;='; [英] TypeError: '>=' not supported between instances of 'datetime.date' and 'str'
本文介绍了在';Date&39;和';str';的实例之间不支持类型错误:';>;=';的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的 pandas df3
看起来像这样:
df3 = pd.DataFrame([['23.02.2012', '23.02.2012', 'aaa'], ['27.02.2014', '27.02.2014', 'bbb'], ['17.08.2018', '17.08.2018', 'ccc'], ['22.07.2019', '22.07.2019', 'ddd']], columns=['date', 'period', 'text'])
如果日期一致,我想使period
列显示以下期间。由于一些date
值使用时间戳进行了格式化,而另一些值没有使用时间戳进行格式化,因此它没有创建正确的period
值。这就是我做df3['question_date'].dt.date
的原因
df3['date'] = pd.to_datetime(df3['date'], errors = 'coerce')
df3['question_date'] = df3['question_date']
df3['period'] = df3['date']
col_name = 'period'
strt_col = df3.pop(col_name)
df3.insert(5, col_name, strt_col)
date1 = pd.Timestamp('1990-10-14').date()
date2 = pd.Timestamp('1994-11-10').date()
date3 = pd.Timestamp('1999-10-1').date()
date4 = pd.Timestamp('2004-6-13').date()
date5 = pd.Timestamp('2009-8-30').date()
date6 = pd.Timestamp('2014-10-14').date()
date7 = pd.Timestamp('2019-11-26').date()
date8 = pd.Timestamp('2021-9-20').date()
mask1 = (df3['question_date'] >= 'date1') & (df3['question_date'] < 'date2')
mask2 = (df3['question_date'] >= 'date2') & (df3['question_date'] < 'date3')
mask3 = (df3['question_date'] >= 'date3') & (df3['question_date'] < 'date4')
mask4 = (df3['question_date'] >= 'date4') & (df3['question_date'] < 'date5')
mask5 = (df3['question_date'] >= 'date5') & (df3['question_date'] < 'date6')
mask6 = (df3['question_date'] >= 'date6') & (df3['question_date'] < 'date7')
mask7 = (df3['question_date'] >= 'date7') & (df3['question_date'] < 'date8')
df3.loc[mask1, 'leg_per'] = '1990-1994'
df3.loc[mask2, 'leg_per'] = '1994-1999'
df3.loc[mask3, 'leg_per'] = '1999-2004'
df3.loc[mask4, 'leg_per'] = '2004-2009'
df3.loc[mask5, 'leg_per'] = '2009-2014'
df3.loc[mask6, 'leg_per'] = '2014-2019'
df3.loc[mask7, 'leg_per'] = '2019-2021'
.
.
.
在mask1
处引发错误
TypeError: '>=' not supported between instances of 'datetime.date' and 'str'
原问题:preventing timestamp creation in to_datetime() formatting in order to group by periods
推荐答案
以下是您的示例的稍作修改的版本,
import pandas as pd
df3 = pd.DataFrame([['23.02.2012', 'aaa'], ['27.02.2014', 'bbb'],
['17.08.2018', 'ccc'], ['22.07.2019', 'ddd']],
columns=['date', 'text'])
# ensure datetime64[ns] type
df3['date'] = pd.to_datetime(df3['date'], dayfirst=True)
请注意,对于示例中给定的日期/时间格式,如果不提供format
,则need to specify that the day comes first。此外,只有在您知道自己在做什么的情况下才使用errors='coerce'
-我总是希望首先引发错误。
现在让我们为某个日期范围创建一个掩码。请注意,pandas
足够聪明,您可以将日期用作字符串(另请参阅Indexing,也可用于比较):
date1 = '2010-10-14'
date2 = '2014-11-10'
m = (df3['date'] >= '2010-10-14') & (df3['date'] < '2014-11-10')
df3.loc[m, 'leg_per'] = '2010-2014'
虚拟df然后看起来像
df3
date text leg_per
0 2012-02-23 aaa 2010-2014
1 2014-02-27 bbb 2010-2014
2 2018-08-17 ccc NaN
3 2019-07-22 ddd NaN
通常,如果您在Pandas中使用Date/Time,并且希望省去一些麻烦:使用Pandas必须提供的DateTime64数据类型。避免使用Python的DateTime、Date和Time类。它将导致您遇到的问题,并减少您手头的功能。
这篇关于在';Date&39;和';str';的实例之间不支持类型错误:';>;=';的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文