繁体   English   中英

如何更改 Pandas 中的日期时间格式

[英]How to change the datetime format in Pandas

我的数据框有一个DOB列(示例格式1/1/2016 ),默认情况下会转换为 Pandas dtype 'object'。

使用df['DOB'] = pd.to_datetime(df['DOB'])将其转换为日期格式,日期将转换为: 2016-01-26 ,其dtype为: datetime64[ns]

现在我想将此日期格式转换为01/26/2016或任何其他通用日期格式 我该怎么做?

(无论我尝试什么方法,它总是以2016-01-26格式显示日期。)

如果需要将datetime时间转换为其他格式,可以使用dt.strftime (但请注意,列的dtype将是objectstring )):

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

更改格式但不更改类型:

df['date'] = pd.to_datetime(df["date"].dt.strftime('%Y-%m'))

之间有区别

  • 数据框单元格的内容(二进制值)和
  • 它为我们人类呈现(显示它)。

所以问题是:如何在不更改数据/数据类型本身的情况下达到我的数据的适当表示

这是答案:

  • 如果您使用Jupyter 笔记本来显示您的数据框,或者
  • 如果您想以HTML 文件的形式进行演示(即使为进一步的 CSS 样式准备了许多多余的idclass属性——您可以使用也可以不使用它们),

使用样式 样式不会更改数据框列的数据/数据类型。

现在,我将向您展示如何在 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!

(每个数据框都有其 Styler 对象,可通过其.style属性访问,我们更改了此df.style对象,而不是数据框本身。)


问题和解答:

  • 问:为什么您的 Styler 对象(或返回它的表达式)用作Jupyter笔记本单元格中的最后一个命令,而不是 Styler 对象本身?

  • A:因为每个 Styler 对象都有一个回调方法._repr_html_() ,它返回一个 HTML 代码来渲染你的数据框(作为一个漂亮的 HTML 表)。

    Jupyter Notebook IDE 会自动调用此方法来渲染具有它的对象。


笔记:

您不需要 Jupyter 笔记本来设置样式(即在不更改数据/数据类型的情况下很好地输出数据帧)。

Styler 对象也有一个方法render() ,如果您想获取带有 HTML 代码的字符串(例如,将格式化的数据框发布到 Web,或者只是以 HTML 格式显示您的表格):

df_styler = df.style.format({"DOB": lambda t: t.strftime("%m/%d/%Y")})
HTML_string = df_styler.render()

第一个答案相比,我建议先使用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)

下面的代码对我有用,而不是以前的代码:

df['DOB']=pd.to_datetime(df['DOB'].astype(str), format='%m/%d/%Y')

你可以试试这个。 它将日期格式转换为 DD-MM-YYYY:

df['DOB'] = pd.to_datetime(df['DOB'], dayfirst = True)

下面的代码更改为 'datetime' 类型,并以给定的格式字符串格式化。

df['DOB'] = pd.to_datetime(df['DOB'].dt.strftime('%m/%d/%Y'))

下面是对我有用的代码。 我们需要非常小心格式。 下面的链接对于了解您的退出格式并更改为所需的格式绝对有用(遵循 strftime( ) 和 strptime() 行为中的 strftime() 和 strptime() 格式代码):

data['date_new_format'] = pd.to_datetime(data['date_to_be_changed'] , format='%b-%y')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM