python - pandas - 检查数据帧中是否存在日期

时间:2016-10-06 10:19:34

标签: python datetime pandas dataframe

我有一个这样的数据框:

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}}没有打印出来。

2 个答案:

答案 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')

至少True any作为评论Edchum

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的值,如果是这种情况,则表示我们匹配,否则不匹配。