There is a difference between
- the content of a dataframe cell (a binary value) and
- its presentation (displaying it) for us, humans.
So the question is: How to reach the appropriate presentation of my data without changing the data / data types themselves?
Here is the answer:
- If you use the Jupyter notebook for displaying your dataframe, or
- if you want to reach a presentation in the form of an HTML file (even with many prepared superfluous idandclassattributes for further CSS styling — you may or you may not use them),
use styling. Styling don't change data / data types of columns of your dataframe.
Now I show you how to reach it in the Jupyter notebook — for a presentation in the form of HTML file see the note near the end of this answer.
I will suppose that your column DOB already has the datetime64 type (you have shown that you know how to reach it). I prepared a simple dataframe (with only one column) to show you some basic styling:
          DOB
0  2019-07-03
1  2019-08-03
2  2019-09-03
3  2019-10-03
          DOB
0  07/03/2019
1  08/03/2019
2  09/03/2019
3  10/03/2019
          DOB
0  03-07-2019
1  03-08-2019
2  03-09-2019
3  03-10-2019
Be careful!
The returning object is NOT a dataframe — it is an object of the class Styler, so don't assign it back to df:
Don't do this:
df = df.style.format({"DOB": lambda t: t.strftime("%m/%d/%Y")})    # Don't do this!
(Every dataframe has its Styler object accessible by its .style property, and we changed this df.style object, not the dataframe itself.)
Questions and Answers:
- Q: Why your Styler object (or an expression returning it) used as the last command in a Jupyter notebook cell displays your (styled) table, and not the Styler object itself? 
- A: Because every Styler object has a callback method - ._repr_html_()which returns an HTML code for rendering your dataframe (as a nice HTML table).
 - Jupyter Notebook IDE calls this method automatically to render objects which have it. 
Note:
You don't need the Jupyter notebook for styling (i.e., for nice outputting a dataframe without changing its data / data types).
A Styler object has a method render(), too, if you want to obtain a string with the HTML code (e.g., for publishing your formatted dataframe on the Web, or simply present your table in the HTML format):
df_styler = df.style.format({"DOB": lambda t: t.strftime("%m/%d/%Y")})
HTML_string = df_styler.render()