yom*_*ome 62 python string datetime strftime pandas
DOB列样本值采用格式 - 1/1/2016默认情况下会转换为对象,如下所示
DOB object
Run Code Online (Sandbox Code Playgroud)
转换为日期格式
df['DOB'] = pd.to_datetime(df['DOB'])
Run Code Online (Sandbox Code Playgroud)
日期转换为
2016-01-26
Run Code Online (Sandbox Code Playgroud)
dtype 是
DOB datetime64[ns]
Run Code Online (Sandbox Code Playgroud)
现在我想将此日期格式转换为01/26/2016或以任何其他常规日期格式.我该怎么做?
无论我尝试什么方法,它总是以2016-01-26格式显示日期.
jez*_*ael 120
您可以使用,dt.strftime如果您需要转换datetime为其他格式(但请注意,然后dtype列将是object(string)):
import pandas as pd
df = pd.DataFrame({'DOB': {0: '26/1/2016', 1: '26/1/2016'}})
print (df)
DOB
0 26/1/2016
1 26/1/2016
df['DOB'] = pd.to_datetime(df.DOB)
print (df)
DOB
0 2016-01-26
1 2016-01-26
df['DOB1'] = df['DOB'].dt.strftime('%m/%d/%Y')
print (df)
DOB DOB1
0 2016-01-26 01/26/2016
1 2016-01-26 01/26/2016
Run Code Online (Sandbox Code Playgroud)
Yan*_*Cao 12
更改格式但不更改类型:
df['date'] = pd.to_datetime(df["date"].dt.strftime('%Y-%m'))
Run Code Online (Sandbox Code Playgroud)
Mar*_*anD 10
之间有区别
所以问题是:如何在不更改数据/数据类型本身的情况下达到我的数据的适当表示?
这是答案:
id和class用于进一步CSS 样式的属性——你可能会也可能不会使用它们),使用样式。样式不会更改数据框列的数据/数据类型。
现在,我将向您展示如何在 Jupyter 笔记本中访问它——对于 HTML 文件形式的演示,请参阅问题末尾附近的注释。
我会假设您的列DOB 已经具有该类型datetime64(您表明您知道如何访问它)。我准备了一个简单的数据框(只有一列)来向您展示一些基本样式:
Run Code Online (Sandbox Code Playgroud)DOB 0 2019-07-03 1 2019-08-03 2 2019-09-03 3 2019-10-03
将其样式为mm/dd/yyyy:
df.style.format({"DOB": lambda t: t.strftime("%m/%d/%Y")})
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)DOB 0 07/03/2019 1 08/03/2019 2 09/03/2019 3 10/03/2019
将其样式为dd-mm-yyyy:
df.style.format({"DOB": lambda t: t.strftime("%d-%m-%Y")})
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)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")}) # Don´t do this!
Run Code Online (Sandbox Code Playgroud)
(每个数据框都可以通过其.style属性访问它的 Styler 对象,我们更改了这个df.style对象,而不是数据框本身。)
问题和解答:
问: 为什么用作Jupyter 笔记本单元格中最后一个命令的 Styler 对象(或返回它的表达式)显示您的(样式化的) table,而不是 Styler 对象本身?
答:因为每个 Styler 对象都有一个回调方法._repr_html_(),该方法返回用于呈现数据框的 HTML 代码(作为一个不错的 HTML 表格)。
Jupyter Notebook IDE 会自动调用此方法来渲染具有它的对象。
笔记:
您不需要 Jupyter 笔记本来进行样式设置(即在不更改其数据/数据类型的情况下很好地输出数据帧)。
render()如果您想获取带有 HTML 代码的字符串(例如,用于将格式化的数据框发布到 Web,或者只是以 HTML 格式显示您的表格),则Styler 对象也有一个方法:
df_styler = df.style.format({"DOB": lambda t: t.strftime("%m/%d/%Y")})
HTML_string = df_styler.render()
Run Code Online (Sandbox Code Playgroud)
The below code worked for me instead of the previous one - try it out !
df['DOB']=pd.to_datetime(df['DOB'].astype(str), format='%m/%d/%Y')
Run Code Online (Sandbox Code Playgroud)
小智 5
与第一个答案相比,我会建议先使用dt.strftime(),然后再使用pd.to_datetime()。这样,它仍然会导致日期时间数据类型。
例如,
import pandas as pd
df = pd.DataFrame({'DOB': {0: '26/1/2016 ', 1: '26/1/2016 '})
print(df.dtypes)
df['DOB1'] = df['DOB'].dt.strftime('%m/%d/%Y')
print(df.dtypes)
df['DOB1'] = pd.to_datetime(df['DOB1'])
print(df.dtypes)
Run Code Online (Sandbox Code Playgroud)