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

26 浏览
0 Comments

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

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

通过使用“df['DOB'] = pd.to_datetime(df['DOB'])”将其转换为日期格式,日期会被转换为“2016-01-26”,其数据类型为“datetime64[ns]”。

现在我想将这个日期格式转换为“01/26/2016”或任何其他通用日期格式。我该如何做?

(无论我尝试哪种方法,它始终以“2016-01-26”格式显示日期。)

0
0 Comments

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

在Pandas中,有一个区别:

- 数据帧单元格的内容(二进制值)和

- 它的演示(人类可视化)

所以问题是:如何在不改变数据/数据类型本身的情况下达到适当的演示效果呢?

答案是使用样式。样式不会改变数据/数据类型的列。

如果您在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。

问题和答案:

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

答:因为每个Styler对象都有一个回调方法._repr_html_(),它返回一个用于呈现数据帧的HTML代码(作为漂亮的HTML表格)。Jupyter Notebook IDE会自动调用该方法来呈现具有该方法的对象。

注:

不需要Jupyter笔记本来应用样式化(即以漂亮的方式输出数据帧而不改变其数据/数据类型)。Styler对象还有一个方法render(),如果要获取带有HTML代码的字符串(例如,用于在Web上发布格式化的数据帧或以HTML格式呈现表格),则可以使用该方法。

需要注意的是,此样式化代码只能在Jupyter笔记本中运行,而在控制台或iPython中运行时不会产生任何效果。

以上内容是关于如何在Pandas中更改日期时间格式的解决方法。

0
0 Comments

Pandas是一个非常强大的数据分析工具,它提供了各种功能来处理和操作数据。其中一个常见的需求是改变日期时间的格式。在Pandas中,我们可以使用pd.to_datetime()函数将日期时间转换为指定格式。然而,在实际操作中,可能会遇到一些问题,导致格式没有改变,但日期值本身发生了改变。

一个常见的错误是使用df["date"].dt.strftime('%Y-%m')来改变日期时间的格式,但这样做只会将日期时间转换为字符串类型。然后,再使用pd.to_datetime()将字符串类型的日期时间转回到datetime64格式。然而,这个过程中会导致日期值本身发生改变。

举个例子,假设原始日期时间的值是“November 26, 2019”。使用df["date"].dt.strftime('%Y-%m')将其转换为字符串类型,结果将是字符串"2019-11"。然后,使用pd.to_datetime()将这个字符串转回datetime64格式,但此时日期值变成了“November 1, 2019”。所以结果是:格式没有改变,但日期值本身发生了改变。

为了避免这个问题,我们需要在执行df["date"].dt.strftime('%Y-%m')之前,确保df["date"]的类型是datetime64

下面是解决这个问题的代码:

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

总结一下,我们在使用Pandas改变日期时间格式时需要注意的问题是:

- 确保日期时间的类型是datetime64,否则格式转换可能会导致日期值的改变。

- 注意strftime()函数的使用,它是将日期时间转换为字符串的函数,而不是改变日期时间格式的函数。

希望这篇文章对你在Pandas中改变日期时间格式的操作有所帮助!

0
0 Comments

在Pandas中,如果需要将日期时间格式更改为其他格式,可以使用`dt.strftime`函数。但是需要注意的是,这样做会将列的数据类型更改为`object`(即字符串)。

首先,我们导入Pandas库并创建一个包含日期字符串的DataFrame:

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

然后,我们使用`pd.to_datetime`函数将日期字符串转换为日期时间格式:

df['DOB'] = pd.to_datetime(df.DOB)
print(df)

输出结果为:

         DOB
0 2016-01-26
1 2016-01-26

接下来,我们使用`dt.strftime`函数将日期时间格式转换为指定的格式(例如'%m/%d/%Y')并将其存储在新的列`DOB1`中:

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

然而,由于`strftime`函数将日期时间列转换为Unicode字符串,因此如果我们想在`DOB1`上执行其他操作,我们需要将其再次转换为日期时间格式。这样做会导致数据类型的转换。那么有没有其他方法可以格式化而不丢失数据类型呢?

可以在Stack Overflow的讨论中继续这个讨论

0