python - 在 Python 列表中将缺失的月份值插入为 0

标签 python datetime numpy

我有一个 list :

t = [['01-2012', 3], 
     ['02-2012', 2], 
     ['03-2012', 9], 
     ['04-2012', 1], 
     ['05-2012', 6], 
     ['06-2012', 40], 
     ['07-2012', 3], 
     ['08-2012', 282], 
     ['09-2012', 3], 
     ['12-2012', 6],
     ['02-2013', 16],
     ['04-2013', 9]]

我需要将所有缺失的 [mm-yyyy, value] 元素添加到此列表中各自的位置作为 [mm-yyyy, 0],以便平滑所有缺失月份的时间序列。有什么猜测吗?

现在我正在做的是计算所有 0 值,如下所示:

total_items = [0]*12

for d in t:
    month = int(d[0].split('-')[0], 10)
    total_items[month-1] = d[1]

所以这给了我所有的值,包括缺失月份为 0 的值,但我不确定如何为它们生成相应的 mm-yyyy 元素。任何帮助,将不胜感激。谢谢。

最佳答案

我认为一个更简单的解决方案是迭代范围内的月份和年份,并添加缺少的内容。

<小时/>

如果您使用 dict 而不是两元素 listlist,这会更容易,所以让我们先这样做。

data = dict(t)
for year in range(2012, 2014):
    for month in range(1, 13):
        mmyyyy = '{:02}-{:04}'.format(month, year)
        data.setdefault(mmyyyy, 0)
<小时/>

然后,如果您想将其转换回原始格式,也很简单:

t = [[k, v] for k, v in data.items()]
<小时/>

如果您需要按日期排序......好吧,您的月份优先格式使之变得丑陋,但这当然是可行的:

t = sorted(t, key=lambda kv: kv[0][3:] + kv[0][:2])

但是,正如最后一行所示,将日期作为日期对象而不是字符串来处理通常要容易得多。因此,您可能也需要考虑这一点。

<小时/>

但是,也许您最好保留 0 作为默认值,并通过循环数年和数月而不是循环遍历集合来处理它们,而不是插入 0?

关于python - 在 Python 列表中将缺失的月份值插入为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18283984/

相关文章:

python - 如何删除数据框列的标题

python - 如果 Rasa 无法识别意图怎么办?

python - 如何将4位数字转换为小时 :minutes time format in pandas

python - 查找两个日期之间月份的最​​佳方法

python - 使用 numpy 搜索大数组

python - 图像 X 轴导数的中位数

python - 我可以仅克隆 Git 存储库中大小低于指定限制的文件吗?

javascript - 如何在特定时间调用javascript函数

python - 从具有大量值的数据框中快速创建数组?

python - 将 .txt 数据加载到 10x256 3d numpy 数组中