Real exports have gaps. pandas shows a missing value as NaN, and most calculations skip them without telling you, which can hide problems.
Start by counting them:
pos.isna().sum()
isna() gives True for every missing cell, and sum() counts the Trues in each column. To see the rows themselves, use the mask as a filter: pos[pos["units"].isna()]. You can't find them with == None, because a missing value never equals anything.
Then decide what to do:
dropna() removes rows with any missing value. Add subset=["units"] to look only at the columns that matter.
fillna(value) puts something in the gaps. A dictionary fills each column with its own value: fillna({"payment": "unknown"}).
Both return a new DataFrame. A column of whole numbers with gaps, like units, is stored as float64, so you'll see 2.0 rather than 2. The data here is pos_export.csv from Juniper Lane's new till system, loaded as pos.