提问人:Programming_Learner_DK 提问时间:7/26/2023 最后编辑:FObersteinerProgramming_Learner_DK 更新时间:7/26/2023 访问量:45
获取 UTC 'T' 和 'Z' 以显示在 DataFrame 列中
Get UTC 'T' and 'Z' to show in DataFrame Column
问:
以一种日期时间格式导入数据帧,并输入到需要此 UTC 格式日期的 API 服务中(注意 和 ):T
Z
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'
当我尝试在列上使用该方法时,我收到异常。.isoformat()
df
我还尝试了以下方法:
读取文件时解析日期
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")
接下来我应该尝试什么?
答:
1赞
FObersteiner
7/26/2023
#1
原则上,您需要将表示为字符串的 datetime 转换为用于处理数据的 datetime 数据类型。若要生成具有特定格式的输出(字符串),请使用命名空间的方法。请注意,对于 ,您必须使用文字“Z”来表示 UTC(而不是 )。strftime
dt
strftime
%Z
作为对类似问题的答案的补充,下面是一个示例,说明如何在 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
评论
.strftime("%Y-%m-%dT%H:%M:%SZ")
Traceback (most recent call last): File "c:\Users\d.kelly\Desktop\Python\PLEX_API_Test\plex_api_take_3.py", line 16, in <module> end_user_df['due_date'] = end_user_df['job_due_date'].to_string().strftime("%Y-%m-%dT%H:%M:%S%Z") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'str' object has no attribute 'strftime'
end_user_df['due_date']
dt
end_user_df['job_due_date'].dt.strftime("%Y-%m-%dT%H:%M:%SZ")