Python 从CSV文件的原始onr获取每个日期条目的计数
我正在使用python从CSV文件中获取值并创建图表。 如何获取每个日期的条目数?例如,示例日期行:Python 从CSV文件的原始onr获取每个日期条目的计数,python,csv,datetime,Python,Csv,Datetime,我正在使用python从CSV文件中获取值并创建图表。 如何获取每个日期的条目数?例如,示例日期行: 4/14/2016 11:05:15 AM 4/14/2016 09:06:15 PM 6/14/2016 11:05:15 AM 它应该给出如下输出: 4/14/2016 entry 2 times 6/14/2016 entry 1 time 只需计算日期: import csv from collections import Counter c = Counter() with
4/14/2016 11:05:15 AM
4/14/2016 09:06:15 PM
6/14/2016 11:05:15 AM
它应该给出如下输出:
4/14/2016 entry 2 times
6/14/2016 entry 1 time
只需计算日期:
import csv
from collections import Counter
c = Counter()
with open('somefile.csv') as f:
reader = csv.reader(f, delimiter='\t')
for row in reader:
c.update(row[0])
for date,count in c.most_common():
print('{} {}'.format(date, count))
只需计算日期:
import csv
from collections import Counter
c = Counter()
with open('somefile.csv') as f:
reader = csv.reader(f, delimiter='\t')
for row in reader:
c.update(row[0])
for date,count in c.most_common():
print('{} {}'.format(date, count))
您可以使用
itertools.groupby
:
with open("your_file.csv") as f:
for x,y in itertools.groupby(sorted(map(str.split, f.read().strip().split("\n"))), key = lambda x:x[0]):
print x,len(list(y))
输出
4/14/2016 2
6/14/2016 1
另一种方法:如果csv包含空行
with open("your_file.csv") as f:
my_list = []
for line in f:
if line:
my_list.append(line.strip().split())
for x,y in itertools.groupby(sorted(my_list, key=lambda x:x[0]), key=lambda x:x[0]):
print x, len(list(y))
您可以使用
itertools.groupby
:
with open("your_file.csv") as f:
for x,y in itertools.groupby(sorted(map(str.split, f.read().strip().split("\n"))), key = lambda x:x[0]):
print x,len(list(y))
输出
4/14/2016 2
6/14/2016 1
另一种方法:如果csv包含空行
with open("your_file.csv") as f:
my_list = []
for line in f:
if line:
my_list.append(line.strip().split())
for x,y in itertools.groupby(sorted(my_list, key=lambda x:x[0]), key=lambda x:x[0]):
print x, len(list(y))
您可以使用
defaultdict
获取值和计数:
import collections
d=collections.defaultdict(list)
with open('data', 'r') as f:
for line in map(lambda line:line.strip(), f.readlines()):
row=line.split()
d[row[0]].append(row[1])
print(d)
for key, value in d.items():
print(key+' has the following '+str(len(value))+' entries/entry: '+str(value))
输出:
$ cat data
4/14/2016 11:05:15 AM
4/14/2016 09:06:15 PM
6/14/2016 11:05:15 AM
$ python p.py
defaultdict(<type 'list'>, {'4/14/2016': ['11:05:15', '09:06:15'], '6/14/2016': ['11:05:15']})
4/14/2016 has the following 2 entries/entry: ['11:05:15', '09:06:15']
6/14/2016 has the following 1 entries/entry: ['11:05:15']
$cat数据
2016年4月14日上午11:05:15
2016年4月14日09:06:15下午
2016年6月14日上午11:05:15
$python p.py
defaultdict(,{'4/14/2016':['11:05:15','09:06:15'],'6/14/2016':['11:05:15']})
2016年4月14日有以下两个条目:['11:05:15','09:06:15']
2016年6月14日有以下1个条目:['11:05:15']
您可以使用defaultdict
获取数值和计数:
import collections
d=collections.defaultdict(list)
with open('data', 'r') as f:
for line in map(lambda line:line.strip(), f.readlines()):
row=line.split()
d[row[0]].append(row[1])
print(d)
for key, value in d.items():
print(key+' has the following '+str(len(value))+' entries/entry: '+str(value))
输出:
$ cat data
4/14/2016 11:05:15 AM
4/14/2016 09:06:15 PM
6/14/2016 11:05:15 AM
$ python p.py
defaultdict(<type 'list'>, {'4/14/2016': ['11:05:15', '09:06:15'], '6/14/2016': ['11:05:15']})
4/14/2016 has the following 2 entries/entry: ['11:05:15', '09:06:15']
6/14/2016 has the following 1 entries/entry: ['11:05:15']
$cat数据
2016年4月14日上午11:05:15
2016年4月14日09:06:15下午
2016年6月14日上午11:05:15
$python p.py
defaultdict(,{'4/14/2016':['11:05:15','09:06:15'],'6/14/2016':['11:05:15']})
2016年4月14日有以下两个条目:['11:05:15','09:06:15']
2016年6月14日有以下1个条目:['11:05:15']
你确定这样行吗?它给了我输出:/6 1 6 4 5 6 4 0 3 2 3如果您的csv格式与您提到的一样,它将起作用;您需要根据文件中的分隔符调整分隔符。在我的示例中,分隔符是一个选项卡\t
。我认为它仍然不起作用,您应该将行[0]
更改为行[0:1]
是否确实有效?它给了我输出:/6 1 6 4 5 6 4 0 3 2 3如果您的csv格式与您提到的一样,它将起作用;您需要根据文件中的分隔符调整分隔符。在我的示例中,分隔符是一个选项卡\t
。我认为它仍然不起作用,您应该将行[0]
更改为行[0:1]
谢谢:)可以很好地处理csv的少量条目(测试了10个条目)。但对于第行下方的150个条目,itertools.groupby(已排序(map(str.split,f.read().strip().split(“\n”)),key=lambda x:x[0]):Thank:)中的x,y的“索引器:列表索引超出范围”。但对于第行下面的150个条目,在itertools.groupby(已排序(map(str.split,f.read().strip().split(“\n”))中的x,y出现错误“索引器错误:列表索引超出范围”):