pandas 获取UTC 'T'和'Z'以显示在DataFrame列中

bzzcjhmw  于 2023-08-01  发布在  其他
关注(0)|答案(1)|浏览(73)

导入一个datetime格式的 Dataframe ,并将其馈送到需要此UTC格式的日期的API服务中(请注意TZ):

2023-07-26T11:04:23.893Z

字符串
值得注意的是,这将被转换为JSON,因此最终的答案可以得到一个字符串。但如果本地Pandas时间处理可以做到的话,那将是更干净的解决方案。
在个别日期,而不是在DataFrame中,我是这样做的:

due_date_end = datetime.now() + relativedelta(months=+3)
due_date_end = due_date_end.isoformat('T') + 'Z'


当我尝试在df列上使用.isoformat()方法时,我得到了一个异常。
我还尝试了以下几点:
阅读文件时分析日期

df = pd.read_csv('my_test_file.csv',parse_dates=['job_due_date'])


使用我在SO上看到的相关答案进行转换:

df['due_date'] = pd.to_datetime(end_user_df['job_due_date']).dt.tz_localize('UTC')


另一个基于SO答案的变体:

end_user_df['due_date'] = pd.to_datetime(end_user_df['job_due_date']).dt.tz_localize('UTC') 
end_user_df['due_date'] = end_user_df['due_date'].to_string().strftime("%Y-%m-%dT%H:%M:%S%Z")


下一步我该尝试什么?

nwo49xxi

nwo49xxi1#

原则上,您希望将表示为字符串的datetime转换为datetime数据类型,以便处理数据。要生成具有特定格式的输出(字符串),可以使用dt命名空间的strftime方法。请注意,对于strftime,您必须使用文字“Z”来表示UTC(而不是%Z)。
作为answer对类似问题的补充,这里有一个示例,您可以如何在ISO格式输出中获得不同精度的小数秒。

import pandas as pd

df = pd.DataFrame({"date": ["2023-07-26T11:04:23.893001Z"]})

# for working with the data, convert to datetime data type
df["date_dt"] = pd.to_datetime(df["date"])

print(df.dtypes)
# date                    object
# date_dt    datetime64[ns, UTC]
# dtype: object

# microsecond precision fractional seconds: just use %f
print(df["date_dt"].dt.strftime("%Y-%m-%dT%H:%M:%S.%fZ"))
# 0    2023-07-26T11:04:23.893001Z
# Name: date_dt, dtype: object

# millisecond precision fractional seconds: truncate output and add 'Z'
print(df["date_dt"].dt.strftime("%Y-%m-%dT%H:%M:%S.%f").str[:-3] + "Z")
# 0    2023-07-26T11:04:23.893Z
# Name: date_dt, dtype: object

# no fractional seconds at all: no %f
print(df["date_dt"].dt.strftime("%Y-%m-%dT%H:%M:%SZ"))
# 0    2023-07-26T11:04:23Z
# Name: date_dt, dtype: object

字符串

相关问题