python - Pandas - 如何从 float64 转换为 timedelta 并自定义输出?
问题描述
我有一个包含以下列的 DF:
datetime datetime64[ns]
objid int64
delay timedelta64[ns]
延迟的输出示例是:`
0 days 00:04:59
出于某种原因,当我将此 DF 加载到 dcc.Store 会话变量中时,
data = df.to_json()
return data
并在另一个回调中读回,
df = pd.read_json(data)
它返回以下类型:
datetime datetime64[ns]
objid int64
delay float64
现在和上面的例子一样,延迟输出是:
299000.0
我不确定它为什么返回 float64,而不是 timedelta64(可能是因为一些 NaN?)。
所以我在做:
df['delay'] = pd.to_timedelta(df['delay'], unit='s')
输出是:
P3DT11H3M20S
我理解它与原始结果不同,即使在 iso 格式上也是如此。
我究竟做错了什么?如何从 float64 转换为 timedelta64[s],并将输出自定义为%d %H:%M:%S
?
解决方案
使用时,日期时间和延迟将更改为毫秒to_json()
。使用astype()
import json
d = list(pd.date_range(dt.datetime(2020,7,1), dt.datetime(2020,7,2), freq="15min"))
df = pd.DataFrame({"datetime":d, "objid":[random.randint(0,100) for x in d], "delay":d - np.roll(d, 1)})
print(df.dtypes)
df2 = pd.DataFrame(json.loads(df.to_json()))
print(df2.dtypes)
df2 = df2.astype({"datetime":"datetime64[ms]","delay":"timedelta64[ms]"})
print(df2.dtypes)
print(df2[:10].to_string(index=False))
输出
datetime datetime64[ns]
objid int64
delay timedelta64[ns]
dtype: object
datetime int64
objid int64
delay int64
dtype: object
datetime datetime64[ns]
objid int64
delay timedelta64[ns]
dtype: object
datetime objid delay
2020-07-01 00:00:00 59 -1 days +00:00:00
2020-07-01 00:15:00 14 0 days 00:15:00
2020-07-01 00:30:00 42 0 days 00:15:00
2020-07-01 00:45:00 29 0 days 00:15:00
2020-07-01 01:00:00 85 0 days 00:15:00
2020-07-01 01:15:00 37 0 days 00:15:00
2020-07-01 01:30:00 59 0 days 00:15:00
2020-07-01 01:45:00 61 0 days 00:15:00
2020-07-01 02:00:00 63 0 days 00:15:00
2020-07-01 02:15:00 14 0 days 00:15:00
推荐阅读
- python - 我过滤素数的功能是打印重复项,我该如何解决?
- html - has-popup="true" on
- 还是?
- angular - 使用 For 循环的 Angular Firebase 复选框
- html - 为什么在我的 div 元素之前有一个随机间隙?
- python-3.x - 如何在其中一个子图中绘制箭头?
- css - 如何在 LWC 系统中包含全局样式
- python - 每次运行时分类报告都会发生变化
- arrays - 如何在二维数组的范围内使用 flatMap() 和 reduce()
- excel - 从数据透视表命名 showdetail 工作表时嵌套 For Loop 出牙问题
- python - Python opencv +烧瓶,VideoCamera打开但不显示视频源