【问题标题】:Python - How to strip off timezone info from datetime objectPython - 如何从日期时间对象中剥离时区信息
【发布时间】:2019-03-05 01:29:00
【问题描述】:

如何从 ColA 获取 ColB

ColA (Localized datetime)           ColB (New datetime)
2016-09-19 00:29:13-05:00           2016-09-19 00:29:13
2016-09-19 04:16:04-02:00           2016-09-19 04:16:04
2016-09-19 06:57:54+01:00           2016-09-19 06:57:54

【问题讨论】:

  • checkout strftime/strptime 函数,允许以给定格式进行转换。
  • ColA (Localized datetime)的dtype是什么?
  • 你在做 df.dtypes 时看到了什么?
  • dtype 是对象

标签: python timezone timestamp


【解决方案1】:

在列上使用 pandas 字符串切片 str as(因为根据 OP,数据类型为 object):

df['ColB (New datetime)'] = df['ColA (Localized datetime)'].str[:-6]

或者:

df['ColB (New datetime)'] = df['ColA (Localized datetime)'].str.slice(start=0,stop=19)

print(df)

   ColA (Localized datetime)  ColB (New datetime)
0  2016-09-19 00:29:13-05:00  2016-09-19 00:29:13
1  2016-09-19 04:16:04-02:00  2016-09-19 04:16:04
2  2016-09-19 06:57:54+01:00  2016-09-19 06:57:54

编辑: 由于之前的SO solution 输出为Timestamp 列格式不一致,虽然数据类型为object 但每个值都是Timestamp

df['ColB (New datetime)'] = df['ColA (Localized datetime)'].apply(lambda x: x.replace(tzinfo=None))

【讨论】:

  • 它返回空值NaN
  • @vinotkr 数据帧的数据类型df.dtypes 是什么?如果它是 object 数据类型,它工作正常。
  • 嗯..有趣。基本上,日期时间是问题stackoverflow.com/questions/52546068的结果
  • df['ColB (New datetime)'] = df['ColA (Localized datetime)'].apply(lambda x: x.replace(tzinfo=None)) 有效。谢谢大家的时间:)
  • @vinotkr 欢迎您!如果解决方案对您有用,请点赞并接受。
【解决方案2】:

将其转换为日期时间

import pandas as pd
import numpy as np

data = ('2016-09-19 00:29:13-05:00,'
        '2016-09-19 04:16:04-02:00,'
'2016-09-19 06:57:54+01:00').split(',')

pd.DataFrame(data).astype(np.datetime64)

【讨论】:

  • 以 UTC 格式返回日期时间
  • 是的,您可以设置为您想要的任何时区。
猜你喜欢
  • 1970-01-01
  • 2016-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多