pythonpandasexcel-automation

why date-time is automatically changed to the object datatype?


Need to convert object type to Date-time and use that converted date-time is unknowingly changed to the object again while filtering.

msft['Tested On'] = pd.to_datetime(msft['Tested On'])
msft['Tested On'].dt.date
df = msft[msft['Tested On'] == '2018-02-02']

Actual result: TypeError: 'NoneType' object is not subscriptable

Expected result: Need to display the filtered list with the other rows and columns also


Solution

  • I think you need to_datetime and if first digit is day, add parameter dayfirst=True:

    print (msft)
      Title plan     run   status           Tested On
    0     A   P0      P0   Passed  11/08/2018 8:42 AM
    1     B   P0      P0   Failed  12/08/2018 8:42 AM
    2     C    -  Canary   Passed  10/08/2018 8:42 AM
    3     D    -  Sanity  Blocked  11/08/2018 8:42 AM
    
    msft['Tested On'] = pd.to_datetime(msft['Tested On'], dayfirst=True)
    print (msft)
      Title plan     run   status           Tested On
    0     A   P0      P0   Passed 2018-08-11 08:42:00
    1     B   P0      P0   Failed 2018-08-12 08:42:00
    2     C    -  Canary   Passed 2018-08-10 08:42:00
    3     D    -  Sanity  Blocked 2018-08-11 08:42:00
    

    Then remove times by dt.floor and compare:

    df = msft[msft['Tested On'].dt.floor('d') == '2018-08-11']
    print (df)
      Title plan     run   status           Tested On
    0     A   P0      P0   Passed 2018-08-11 08:42:00
    3     D    -  Sanity  Blocked 2018-08-11 08:42:00
    

    Detail:

    print (msft['Tested On'].dt.floor('d'))
    0   2018-08-11
    1   2018-08-12
    2   2018-08-10
    3   2018-08-11
    Name: Tested On, dtype: datetime64[ns]