我有一个这样的数据框:
if pandas.Timestamp("2010-03-01 00:00:00", tz=None) in df['date'].values:
print 'date exist'
if datetime.strptime('2010-03-01', '%Y-%m-%d') in df['date'].values:
print 'date exist'
if '2010-03-01' in df['date'].values:
print 'date exist'
我想检查此数据框中是否存在日期,但我无法做到。我尝试了以下各种方法,但仍无用:
FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
日期存在'从未打印过。我怎么能检查日期是否存在?因为我想在所有类别中插入数字等于0的无存在日期,以便我可以绘制连续折线图(每行一个类别)。感谢帮助。提前致谢。
最后一个给了我这个:
date exist
并且{{1}}没有打印出来。
答案 0 :(得分:4)
我认为您需要先to_datetime
转换为日期时间,然后如果需要选择所有行,请使用boolean indexing
:
df.date = pd.to_datetime(df.date)
print (df.date == pd.Timestamp("2010-03-01 00:00:00"))
0 True
1 False
2 False
3 False
4 False
5 False
6 False
7 False
8 False
9 False
10 False
Name: date, dtype: bool
print (df[df.date == pd.Timestamp("2010-03-01 00:00:00")])
category date number
0 Cat1 2010-03-01 1
对于返回True
,请使用values
转换为numpy array
的检查值:
if ('2010-03-01' in df['date'].values):
print ('date exist')
if (df.date == pd.Timestamp("2010-03-01 00:00:00")).any():
print ('date exist')
答案 1 :(得分:0)
例如,要确保ds
的第4个值包含在其中:
len(set(ds.isin([ds.iloc[3]]))) > 1
让ds
成为[index,pandas._libs.tslib.Timestamp]形式的Pandas DataSeries,其中包含示例值:
0 2018-01-31 19:08:27.465515
1 2018-02-01 19:08:27.465515
2 2018-02-02 19:08:27.465515
3 2018-02-03 19:08:27.465515
4 2018-02-04 19:08:27.465515
然后,我们使用isin
本地方法来获取布尔数据系列,其中每个条目指示ds
中的位置与作为函数的参数传递的值匹配(从{{1}开始)期望我们需要以列表格式提供值的值列表。)
接下来,我们使用isin
全局方法来获取具有1或2个值的集合,具体取决于是否匹配(True和False值)或不是(仅False值)。
最后,我们检查集合是否包含多于1的值,如果是这种情况,则表示我们匹配,否则不匹配。