【发布时间】:2021-03-09 13:23:11
【问题描述】:
How to output to dict type in Pandas
刚刚在这里问了一个问题,稍微了解了一下问题的原因,但是不知道怎么解决,所以问了。
这是数据最初显示的内容。
"report": {
"2020-3-27": 999,
"2021-2-18": 1221,
"2021-2-22": 1201,
"2021-3-2": 1004,
"2021-3-3": 491,
"2021-3-5": 168
},
以前的数据分为日期和数据部分,缺的部分补上。
mappedData = {
f"{record['created_at__year']}-{record['created_at__month']}-{record['created_at__day']}":
record['time__sum']
for record in data
}
s = pd.Series(mappedData)
idx = pd.date_range(s.index.min(), s.index.max())
s.index = pd.DatetimeIndex(s.index)
s = s.reindex(idx, fill_value=0)
s
"report": [
999,
0,
0,
0,
0,
0,
0,
0,
0,
......
]
s.index
"report": [
"2020-03-27T00:00:00",
"2020-03-28T00:00:00",
"2020-03-29T00:00:00",
"2020-03-30T00:00:00",
"2020-03-31T00:00:00",
"2020-04-01T00:00:00",
"2020-04-02T00:00:00",
"2020-04-03T00:00:00",
.....
]
test = {s.index[i]: s[i] for i in range(len(s))}
我希望 statemenet 的结果看起来像这样
"report": [
"2020-03-27T00:00:00":999,
"2020-03-28T00:00:00":0,
"2020-03-29T00:00:00":0,
"2020-03-30T00:00:00":0,
"2020-03-31T00:00:00":0,
"2020-04-01T00:00:00":0,
"2020-04-02T00:00:00":0,
"2020-04-03T00:00:00":0,
.....
]
如果你运行之前的代码,你会得到错误信息“keys must be str, int, float, bool or None, not int64”。
如果我用test = {s[i] for i in range(len(s))} 或test = {s.index[i] for i in range(len(s))} 尝试它,它可以工作,但如果我用test = {s[i] for i in range(len(s))} 尝试它,它就不起作用。修复第一个缺失数据的结果不反映,返回后面的数据。
我认为错误“keys must be str, int, float, bool or None, not int64”是由s和s.index的数量不同引起的。它是否正确?
它是否正确?还有,我该如何改进呢?
对不起,我是初学者,但如果你能告诉我,我将不胜感激。
【问题讨论】: