问题:如何在熊猫中更改日期时间格式
我的数据框有一个DOB
列(示例格式1/1/2016
),默认情况下该列会转换为dtype’object’熊猫:DOB object
使用将日期转换为日期格式df['DOB'] = pd.to_datetime(df['DOB'])
,日期将转换为:2016-01-26
,日期dtype
为:DOB datetime64[ns]
。
现在,我想将此日期格式转换为01/26/2016
任何其他通用日期格式或。我该怎么做?
无论我尝试哪种方法,它始终以2016-01-26
格式显示日期。
回答 0
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
回答 1
更改格式但不更改类型:
df['date'] = pd.to_datetime(df["date"].dt.strftime('%Y-%m'))
回答 2
下面的代码对我有用,而不是上一个-试试看!
df['DOB']=pd.to_datetime(df['DOB'].astype(str), format='%m/%d/%Y')
回答 3
与第一个答案相比,我建议先使用dt.strftime(),然后再使用pd.to_datetime()。这样,它将仍然导致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)
回答 4
两者之间有区别
- 数据帧单元的内容(二进制值)和
- 它对我们(人类)的演示(展示)。
所以问题是:如何在不更改数据/数据类型本身的情况下达到我的数据的适当表示?
答案是:
- 如果您使用Jupyter笔记本显示数据框,或者
- 如果您想以HTML文件的形式进行演示(即使准备了许多多余的属性
id
和class
属性来进行进一步的 CSS样式设置,则可以使用也可以不使用它们),
使用样式。样式不会更改数据框列的数据/数据类型。
现在,我向您展示如何在Jupyter笔记本中找到它-有关HTML文件形式的演示文稿,请参阅问题末尾的注释。
我将假设您的列DOB
已经具有该类型datetime64
(您已表明知道如何访问它)。我准备了一个简单的数据框(只有一列),向您展示了一些基本样式:
没有样式:
df
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")})
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")})
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!
(每个数据框都可以通过其.style
属性访问其Styler对象,我们更改了该df.style
对象,而不是数据框本身。)
问题和解答:
问: 为什么在Jupyter笔记本单元格中用作最后一条命令的Styler对象(或返回它的表达式)显示您的(样式化)表,而不显示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()
回答 5
下面的代码更改为“ datetime”类型,并以给定的格式字符串格式化。效果很好!
df['DOB']=pd.to_datetime(df['DOB'].dt.strftime('%m/%d/%Y'))
回答 6
您可以尝试将日期格式转换为DD-MM-YYYY:
df['DOB'] = pd.to_datetime(df['DOB'], dayfirst = True)