Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在计算发生次数后,如何在列表中为每一天创建条目_Python_List_Date_For Loop_Count - Fatal编程技术网

Python 在计算发生次数后,如何在列表中为每一天创建条目

Python 在计算发生次数后,如何在列表中为每一天创建条目,python,list,date,for-loop,count,Python,List,Date,For Loop,Count,我在两个单独的csv文件中有两列日期。我正在将它们读入python,并计划在matplotlib中绘图 一种是发票: 5/1/2015 5/1/2015 5/1/2015 5/2/2015 5/2/2015 5/2/2015 5/2/2015 5/3/2015 5/3/2015 5/3/2015 5/3/2015 5/4/2015 5/4/2015 5/4/2015 5/4/2015 5/4/2015 5/4/2015 5/5/2015 5/5/2015 5/5/2015 5/5/2015 5/

我在两个单独的csv文件中有两列日期。我正在将它们读入python,并计划在matplotlib中绘图

一种是发票:

5/1/2015
5/1/2015
5/1/2015
5/2/2015
5/2/2015
5/2/2015
5/2/2015
5/3/2015
5/3/2015
5/3/2015
5/3/2015
5/4/2015
5/4/2015
5/4/2015
5/4/2015
5/4/2015
5/4/2015
5/5/2015
5/5/2015
5/5/2015
5/5/2015
5/7/2015
另一个是争议:

5/1/2015
5/1/2015
5/2/2015
5/2/2015
5/3/2015
5/5/2015
5/5/2015
我想用每天的争议数量除以发票数量列一张清单。因此,2015年5月1日的百分比为2/3。2015年5月2日至4日。2015年5月3日为1/4。2015年5月4日是0。2015年5月5日为2/4。2015年5月6日没有发票或争议,因此百分比应为零。因此,列表应该是[.66、.5、.25、0、.5、0、0]

然后我将在y轴上绘制百分比,并将日期作为x轴

我曾尝试使用df.index.day,但后来我得到了每个月第一天、第二天等的组。我使用value_计数来计算每个日期的发生次数,然后在两个列表之间进行划分,但我缺少没有发票或争议的数字,我希望每天都有一个值


有人知道这样做的简单方法吗?

获取计数的一个简单方法是使用
集合。计数器

from collections import Counter
with open('invoice_dates') as f:
    invoice_count = Counter(line.strip() for line in f)
对于
争议计数
也是如此。然后,您可以获得一个映射日期的字典,以便根据

from __future__ import division # in case you are on Python 2.x
dispute_percentage = {date: dispute_count.get(date, 0) / invoices
                      for date, invoices in invoice_count.items()}

如果您使用的是Python2.x,请使用
iterms()
而不是最后一行中的
items()

您应该更清楚地说明您使用的是
pandas
——有内置工具可以帮助您完成您想做的事情。在这种情况下,您可以对
f
f2
使用
value\u计数。使用您的示例数据:

>>> f = pd.to_datetime(f)
>>> f2 = pd.to_datetime(f2)
>>> f.value_counts()/f2.value_counts()
2015-05-01    0.666667
2015-05-02    0.500000
2015-05-03    0.250000
2015-05-04         NaN
2015-05-05    0.500000
2015-05-07         NaN
dtype: float64
>>> (f.value_counts()/f2.value_counts()).fillna(0.0)
2015-05-01    0.666667
2015-05-02    0.500000
2015-05-03    0.250000
2015-05-04    0.000000
2015-05-05    0.500000
2015-05-07    0.000000
dtype: float64

谢谢你的回答。这看起来很像蟒蛇,正是我想要的!不幸的是,我的数据集似乎太大了。我得到了这个错误:ValueError:太多的值无法解包。你知道避免这种情况的方法吗?@jenryb:“ValueError:太多的值无法解包”通常是由
var1,var2=“value1”,“value2”,“value3”之类的原因造成的。这与您的数据集太大无关,但与您试图将太多的值放入太少的变量(本例中为3到2)无关!看起来这是他代码最后一行的
for
的问题。将
invoice\u count
替换为
invoice\u count.items()
@JakeGriffin,该添加修复了它。但是,输出的所有百分比均为0.0,这是不正确的。现在不匹配,因为日期的格式不同(mm/dd/yyyy与yyyy-mm-dd)。您必须确保
争议计数
发票计数
指令中的键的格式相同,或者当您执行
争议计数时。get(date,0)
,它将始终返回默认的
0
。如果你在这方面需要帮助,我建议你问一个新问题。谢谢你的回答。这也有助于我的日期格式实际上是不同的。对不起,我没有更清楚地说明我在使用熊猫!