python-熊猫-检查数据框中是否存在日期

Leo*_*Leo 5 python datetime dataframe pandas

我有一个这样的数据框:

      category  date            number
0      Cat1     2010-03-01      1
1      Cat2     2010-09-01      1
2      Cat3     2010-10-01      1
3      Cat4     2010-12-01      1
4      Cat5     2012-04-01      1
5      Cat2     2013-02-01      1
6      Cat3     2013-07-01      1
7      Cat4     2013-11-01      2
8      Cat5     2014-11-01      5
9      Cat2     2015-01-01      1
10     Cat3     2015-03-01      1
Run Code Online (Sandbox Code Playgroud)

我想检查此数据框中是否存在日期,但无法这样做。我尝试了以下各种方法,但仍然没有用:

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'  
Run Code Online (Sandbox Code Playgroud)

“日期存在”从未打印过。如何检查日期是否存在?因为我想在所有类别中插入数字不等于0的不存在日期,以便绘制连续的折线图(每条线一个类别)。感谢帮助。提前致谢。

最后一个给我这样的: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison 而date exist没有得到打印。

jez*_*ael 6

我认为您需要先转换为日期时间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
Run Code Online (Sandbox Code Playgroud)

对于返回True使用校验值转换为numpy array通过values:

if ('2010-03-01' in df['date'].values):
    print ('date exist')
Run Code Online (Sandbox Code Playgroud)

或至少一个True由any作为注释Edchum:

if (df.date == pd.Timestamp("2010-03-01 00:00:00")).any():
    print ('date exist')  
Run Code Online (Sandbox Code Playgroud)