我想格式化数据框的结果,使其看起来更具可读性。 df看起来像这样:
lack_of_minutes['Period'] = pd.to_datetime(lack_of_minutes['time']) - lack_of_minutes['START_TIME']
lack_of_minutes df的类型为timedelta64 [ns]。
为了避免错误TypeError:Timedelta(' 0天01:08:12')不是JSON序列化我返回json像这样:
return json.dumps(data_load, indent=4, sort_keys=True, default=str)
基本上它只是转换它不知道的所有字符串
但是它返回的格式是这样的:0 days 17:25:35
我想排除0天,只返回时间。 17:25:35
更具可读性。
我的第一个想法是切割df,但没有工作。
这样做的正确方法是什么。我正在使用python 2.x
答案 0 :(得分:0)
我怀疑你拥有的对象是pandas._libs.tslib.Timedelta
,它不是JSON可序列化的(AFAIK)。如果你想要做的就是删除'days'部分并且只有HH:MM:SS,你可以使用字符串操作来完成。
import pandas as pd
# create a dummy Timedelta
d = datetime.datetime(2017,11,21,12,30) - datetime.datetime(2017,11,20,23,59)
print str(pd.to_timedelta(d))[-8:]
输出:
'12:31:00'
在您的数据框中,您可以通过应用此功能将列转换为此格式的字符串。我建议创建一个新列(而不是覆盖),这样可以确保输出符合预期。
# new column is a string HH:MM:SS
lack_of_minutes['NewPeriod'] = lack_of_minutes['Period'].apply(lambda x: str(x)[-8:])
请记住,这将永远丢弃字符串中的日期部分,即使它不是0。