A day with no sales and a day with no sales report tell you different things. One records an outcome. The other leaves an unanswered question.
That difference can change an average even when the visible total looks perfectly reasonable. Before filling a blank with zero, ask what happened to the record.

Three reported days in a four-day window
Imagine an online shop reviewing completed orders from Monday through Thursday. These hypothetical figures include a genuine quiet Tuesday and a missing Wednesday report.
| Day | Completed orders | What the record tells us |
|---|---|---|
| Monday | 120 | Reported |
| Tuesday | 0 | Reported zero |
| Wednesday | Not reported | Unknown |
| Thursday | 180 | Reported |
The three reported days contain 300 completed orders. Their mean is \(300\div3=100\) orders per reported day. Tuesday belongs in that denominator: zero is a recorded number.
That calculation does not establish the average for all four calendar days. Wednesday could have been closed, busy, or simply missing from the export.
Filling the blank makes an assumption
Call Wednesday’s unknown count x. The complete four-day average would be:
\[\frac{120+0+x+180}{4}=\frac{300+x}{4}.\]
If a reliable record confirms that no orders occurred on Wednesday, then \(x=0\) and the four-day average is 75. If Wednesday had 100 orders, the average is 100. If it had 200, the average is 125. The same three reported values are compatible with all three results.
Entering zero before investigating chooses the first scenario. Leaving the value missing keeps the uncertainty visible. Neither action changes the known sum of 300, which is why a totals-only check can miss the issue.
Do not erase the genuine zero
There is an opposite mistake: dropping Tuesday because its value looks empty or uninteresting. Averaging Monday and Thursday alone gives 150. That is an average across the two positive-order days, answering a different question from the mean across reported days.
The label on the metric should make its denominator clear. “Orders per reported day,” “orders per open day,” and “orders per calendar day” can require different sets of dates. A familiar word such as “daily” does not settle that choice.
Check the calendar and the collection process
First list every date that should be in the report. Then distinguish a missing date from an existing row whose order field is blank. The first can point to an absent report; the second can point to a missing value inside a report. Neither automatically establishes zero orders.
Next check the source: an order log, a closure calendar, an import error, or the person who supplied the file. A confirmed closure can justify zero. A failed export calls for recovering the data. A genuine unanswered gap should remain marked as unknown.
In pandas, a mean normally skips missing values while retaining zero. That is a software behavior, not evidence that the omitted dates are irrelevant to the business question. Checking the number of known values alongside the expected number of dates makes the limitation easier to see.
For the shop, a useful interim report is therefore: 300 known orders across three reported days; one of four calendar days is unreported. It states what is supported without pretending Wednesday has been measured.
When cleaning a real table, keep those statuses separate. Our guide to finding and filling missing values in pandas explains the value-level checks. Building the expected date grid is a separate step; adding a date to the table does not supply its order count.


