如何从Pandas数据框架的时间戳列中移除时区

如何从Pandas数据框架的时间戳列中移除时区

世界被划分为24个时区。我们都知道,不同的时区是需要的,因为整个地球不是在同一时间点亮。虽然在许多情况下,我们可能不需要时区,特别是在数据驻留在某个地点的共同服务器上,甚至是我们的本地系统的情况下。在这篇文章中,我们将看到如何从pandas数据框架的时间戳列中删除时区。

为演示创建数据框架:

import pandas as pd
from datetime import datetime, timezone
 
# CREATE THE PANDAS DATAFRAME
# WITH TIMESTAMP COLUMN
df = pd.DataFrame({
    "orderNo": [
        "4278954",
        "3473895",
        "8763762",
        "4738289",
        "1294394"
    ],
    "timestamp": [
        datetime.strptime("2021-06-01",
                          "%Y-%m-%d").replace(tzinfo=timezone.utc),
        datetime.strptime("2021-06-02",
                          "%Y-%m-%d").replace(tzinfo=timezone.utc),
        datetime.strptime("2021-06-03",
                          "%Y-%m-%d").replace(tzinfo=timezone.utc),
        datetime.strptime("2021-06-04",
                          "%Y-%m-%d").replace(tzinfo=timezone.utc),
        datetime.strptime("2021-06-05",
                          "%Y-%m-%d").replace(tzinfo=timezone.utc)
    ]
})
 
# PRINT THE DATATYPES OF
# EACH COLUMN OF DATAFRAME
print(df.dtypes)
 
# VIEW THE DATAFRAME
print(df)

输出:

如何从Pandas数据框架的时间戳列中移除时区

代码块1的输出

输出的第一部分告诉我们一个时间戳列是一个DateTime对象。方括号中的UTC表示包含了时区信息,实际上就是UTC时间戳。这是因为我们提供的时区是UTC。

方法1:使用datetime.replace()方法

Datetime.replace() 函数用于用给定参数替换DateTime对象的内容。

语法: Datetime_object.replace(tzinfo)

参数:

  • tzinfo:新的时区信息。

返回:它返回修改的日期时间对象

现在,我们将使用datetime模块创建一个函数来删除时区。该函数将应用于时间戳列中的每条记录。

import pandas as pd
from datetime import datetime, timezone
 
# CREATE THE DATAFRAME
df = pd.DataFrame({
    "orderNo": [
        "4278954",
        "3473895",
        "8763762",
        "4738289",
        "1294394"
    ],
    "timestamp": [
        datetime.strptime("2021-06-01",
                          "%Y-%m-%d").replace(tzinfo=timezone.utc),
        datetime.strptime("2021-06-02",
                          "%Y-%m-%d").replace(tzinfo=timezone.utc),
        datetime.strptime("2021-06-03",
                          "%Y-%m-%d").replace(tzinfo=timezone.utc),
        datetime.strptime("2021-06-04",
                          "%Y-%m-%d").replace(tzinfo=timezone.utc),
        datetime.strptime("2021-06-05",
                          "%Y-%m-%d").replace(tzinfo=timezone.utc)
    ]
})
 
# PRINT THE DATATYPE OF
# EACH COLUMN BEFORE MANIPULATION
print(df.dtypes)
 
# FUNCTION TO REMOVE TIMEZONE
def remove_timezone(dt):
   
    # HERE `dt` is a python datetime
    # object that used .replace() method
    return dt.replace(tzinfo=None)
 
# APPLY THE ABOVE FUNCTION TO
# REMOVE THE TIMEZONE INFORMATION
# FROM EACH RECORD OF TIMESTAMP COLUMN IN DATAFRAME
df['timestamp'] = df['timestamp'].apply(remove_timezone)
 
# PRINT THE DATATYPE OF
# EACH COLUMN AFTER MANIPULATION
print(df.dtypes)

输出:

如何从Pandas数据框架的时间戳列中移除时区

代码块2的输出

在输出中,我们可以看到,在操作时区之前,DateTime列即”timestamp”列有UTC时区信息。在对数据框架的时间戳列的每条记录应用remove_timezone函数后,我们没有看到数据框架中存在任何UTC信息。数据框架中的”timestamp “列有python数据时间对象作为其值。因此,当这些值通过_remove_timezone()函数时,它使用了Python数据时间模块的replace()方法。

方法2:使用Pandas

我们可以在不使用DateTime模块的情况下实现同样的效果。让我们看看如何–

import pandas as pd
from datetime import datetime, timezone
 
# CREATE THE DATAFRAME
df = pd.DataFrame({
    "orderNo": [
        "4278954",
        "3473895",
        "8763762",
        "4738289",
        "1294394"
    ],
    "timestamp": [
        datetime.strptime(
            "2021-06-01", "%Y-%m-%d").replace(tzinfo=timezone.utc),
        datetime.strptime(
            "2021-06-02", "%Y-%m-%d").replace(tzinfo=timezone.utc),
        datetime.strptime(
            "2021-06-03", "%Y-%m-%d").replace(tzinfo=timezone.utc),
        datetime.strptime(
            "2021-06-04", "%Y-%m-%d").replace(tzinfo=timezone.utc),
        datetime.strptime(
            "2021-06-05", "%Y-%m-%d").replace(tzinfo=timezone.utc)
    ]
})
 
# PRINT THE DATATYPE OF EACH COLUMN BEFORE
# MANIPULATION
print(df.dtypes)
 
# REMOVING THE TIMEZONE INFORMATION
df['timestamp'] = df['timestamp'].dt.tz_localize(None)
 
# PRINT THE DATATYPE OF EACH COLUMN AFTER
# MANIPULATION
print(df.dtypes)

输出:

如何从Pandas数据框架的时间戳列中移除时区

代码块3的输出

在上面的例子中,我们可以看到dt.tz_localize(None)方法可以应用到数据帧列中,以删除时区信息。与上例类似的输出反映出,经过操作,UTC时区信息不再出现在时间戳列中。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程