pythonpandasdatetime

What is NaT in Pandas?


I have a dataframe with some "NaT" values in a datetime column. What does that mean?

   project   status  completed
0  windows     done 2025-08-20
1    doors     done 2025-08-21
2     hvac  delayed        NaT

I checked the docs page pandas.NaT, but it just says "alias of NaT", which doesn't seem to make sense.

I found plenty of SO questions, but I didn't see one that actually explains what NaT is. E.g. How do I check if a specific item in pandas series is NaT

This is meant to be a canonical question with a self-answer. I'm not genuinely asking for myself, just want to put this out there since the docs page is lacking, and someone asked this question in earnest here: "What are NaT? All of the time values should be datetime objects."


Solution

  • NaT means "Not a Time". It's the equivalent of NaN "Not a Number". You'll see it in datetime and timedelta columns for missing values.

    The docs page is supposed to have a fuller description, but there seems to be a bug with Pandas 2.2+. For now, see the Missing values page:

    NaT is the missing value for timedelta and datetime data (see below):

    NaT : (N)ot-(A)-(T)ime, the time equivalent of NaN.

    Or the user guide:

    Working with missing data

    Values considered “missing”

    pandas uses different sentinel values to represent a missing (also referred to as NA) depending on the data type. [...]

    NaT for NumPy np.datetime64, np.timedelta64, and PeriodDtype.

    Or the help text:

    In [5]: ?pd.NaT
    Type:        NaTType
    String form: NaT
    File:        .../pandas/_libs/tslibs/nattype.cpython-311-x86_64-linux-gnu.so
    Docstring:  
    (N)ot-(A)-(T)ime, the time equivalent of NaN.
    
    Examples
    --------
    >>> pd.DataFrame([pd.Timestamp("2023"), np.nan], columns=["col_1"])
            col_1
    0  2023-01-01
    1         NaT