如何从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)
输出:
代码块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)
输出:
代码块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)
输出:
代码块3的输出
在上面的例子中,我们可以看到dt.tz_localize(None)方法可以应用到数据帧列中,以删除时区信息。与上例类似的输出反映出,经过操作,UTC时区信息不再出现在时间戳列中。