使用Pandas设置Python日期时间的字符串格式(有点)不稳定的时区
使用Pandas解析数据的时间戳时遇到问题 我试图解析的日期时间格式的一个示例类似于2012-05-02 01:00:00-05:00。从Pandas文档,我被驱动到相关文档,这些文档建议我应该使用类似于%Y-%m-%d%H:%m:%S%z的格式字符串 我使用了如下格式字符串使用Pandas设置Python日期时间的字符串格式(有点)不稳定的时区,python,pandas,datetime,Python,Pandas,Datetime,使用Pandas解析数据的时间戳时遇到问题 我试图解析的日期时间格式的一个示例类似于2012-05-02 01:00:00-05:00。从Pandas文档,我被驱动到相关文档,这些文档建议我应该使用类似于%Y-%m-%d%H:%m:%S%z的格式字符串 我使用了如下格式字符串 fmts = {"variable_name": `%Y-%m-%d %H:%M:%S%z`} df = pd.read_sql_query("SELECT * FROM some_table", con=some_eng
fmts = {"variable_name": `%Y-%m-%d %H:%M:%S%z`}
df = pd.read_sql_query("SELECT * FROM some_table", con=some_engine, parse_dates=fmts)
此解决方案返回了一个数据帧,但无法解析请求的列。我想这是因为我的数据的时区组件有一个意外的冒号!例如,我给定的时区为-05:00,%z格式字符串预期为-0500
您有什么想法吗?您可以编写一个函数来转换日期字符串格式。然后可以将其应用于列以转换为datetimes。此函数可以返回时区 代码: 测试结果: 使用dateutil: 如果你有访问权限,你可以使用他们的解析代码。这是上述func的替代品,它可以很好地处理日期格式
import dateutil
def func(datetime_string):
result = dateutil.parser.parse(datetime_string).astimezone(pytz.UTC)
if tz is None:
result = result.replace(tzinfo=None)
elif tz is not True:
result = result.astimezone(tz)
return result
您还可以在应用中使用dateutil.parser作为:
我不是这个风格的超级粉丝,因为它采用了固定偏移时区,这意味着它不知道夏令时。我个人更喜欢夏时制或UTC。您可以编写一个函数来转换日期字符串格式。然后可以将其应用于列以转换为datetimes。此函数可以返回时区 代码: 测试结果: 使用dateutil: 如果你有访问权限,你可以使用他们的解析代码。这是上述func的替代品,它可以很好地处理日期格式
import dateutil
def func(datetime_string):
result = dateutil.parser.parse(datetime_string).astimezone(pytz.UTC)
if tz is None:
result = result.replace(tzinfo=None)
elif tz is not True:
result = result.astimezone(tz)
return result
您还可以在应用中使用dateutil.parser作为:
我不是这个风格的超级粉丝,因为它采用了固定偏移时区,这意味着它不知道夏令时。我个人更喜欢夏时制或UTC
timestamp zulu_no_tz utc_tz \
0 2012-05-02 01:00:00-05:00 2012-05-02 06:00:00 2012-05-02 06:00:00+00:00
1 2012-05-02 03:00:00-05:00 2012-05-02 08:00:00 2012-05-02 08:00:00+00:00
local_tz
0 2012-05-02 01:00:00-05:00
1 2012-05-02 03:00:00-05:00
import dateutil
def func(datetime_string):
result = dateutil.parser.parse(datetime_string).astimezone(pytz.UTC)
if tz is None:
result = result.replace(tzinfo=None)
elif tz is not True:
result = result.astimezone(tz)
return result
import dateutil
df.timestamp.apply(dateutil.parser.parse)