数据框单元格的内容(二进制值)和其呈现方式(供人类查看)之间存在差异。
因此,问题是:如何在不改变数据/数据类型本身的情况下达到适当的呈现方式?
这里是答案:
- 如果您使用 Jupyter笔记本来显示您的数据框,或者
- 如果您想要以HTML文件的形式呈现(甚至带有许多准备好的多余
id
和class
属性以进行进一步CSS样式设置 - 您可以使用它们,也可以不使用它们),
请使用样式。样式不会更改数据/数据框列的数据/数据类型。
现在我向您展示如何在Jupyter笔记本中实现它 - 如果要以HTML文件形式进行演示,请参见本答案末尾的注释。
我假设您的列DOB
已经具有datetime64
类型(您已经展示了您知道如何实现它)。 我准备了一个简单的数据框(仅有一列),以向您展示一些基本样式:
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
小心!
返回的对象不是数据框,而是Styler
类的对象,所以不要将其赋回给df
:
不要这样做:
df = df.style.format({"DOB": lambda t: t.strftime("%m/%d/%Y")})
每个数据框都可以通过其
.style
属性访问其Styler对象,我们更改的是
df.style
对象,而不是数据框本身。
问题和答案:
问:为什么在Jupyter笔记本单元格中,将您的Styler对象(或返回它的表达式)用作最后一个命令会显示您的(经过样式处理的)表格,而不是Styler对象本身?
答:因为每个Styler对象都有一个回调方法._repr_html_()
,该方法返回呈现数据帧(作为漂亮的HTML表格)的HTML代码。
Jupyter Notebook IDE自动调用此方法以呈现具有该方法的对象。
注意:
你不需要使用Jupyter笔记本来进行样式设置(即,对数据框进行美化而不改变其数据/数据类型)。
如果你想要获得一个包含HTML代码的字符串(例如,将格式化后的数据框发布到Web上,或者仅仅是以HTML格式呈现表格),Styler对象也有一个名为render()
的方法:
df_styler = df.style.format({"DOB": lambda t: t.strftime("%m/%d/%Y")})
HTML_string = df_styler.render()
datetime
作为一个保存日期和时间信息的数据结构没有格式 - 它只是一个数据结构。它的内容可以以一定的方式 /“格式”进行显示。或者如果您有表示日期/时间的字符串,则可以以一定的方式 /“格式”在其中表达。 - FObersteiner__str __()
方法。我只是提醒一下以防有新手感到困惑。 - wjandrea01/26/2016
不是一般的日期格式。它是美国特定的,如果日期小于等于12,它也可能是英国的dd/mm/yyyy格式,因此含糊不清。在任何可以的地方,请使用YYYY-MM-DD格式,其他任何格式都会带来很多麻烦。唯一不应该使用这种格式的地方是用户界面本身,当需要以适合用户文化的方式显示时。 - dsz