我有一个csv文件,其中包含各种文件的下载时间,我想知道每天下载的文件数。
代码:
with open('hello.csv', 'r', encoding="latin-1") as csvfile:
readCSV=csv.reader(csvfile, delimiter=',')
list1=list(readCSV)
count=0
b=-1
for j in list1:
b=b+1
if b>0:
dt=j[1]
dt_obj=parse(dt)
d=dt_obj.date()
if dt==d:
count+=1
else:
print(count)
break
hello.csv
是我的csv文件。我有日期时间,所以我使用解析器来获取日期。我想要每天的下载数量。我知道这段代码行不通,但是我不知道如何比较下一个条目是否为同一日期。
我的日期时间看起来像“ 2004-01-05 17:56:46”,位于csv文件的第二列中。当我在2004-01-05上有7个条目,而在2004-01-06上有5个条目时,矢量计数应类似于count = [7 5]
答案 0 :(得分:0)
您可以按照以下步骤操作。
# Read csv file
data = pd.read_csv('hello.csv')
# Converting to datetime object
data['timestamp'] = pd.to_datetime(data['timestamp'])
# Creating date column
data['date'] = data['timestamp'].apply(lambda x: x.date())
# Grouping by date
data.group_by('date')['column'].count()
# Result
date
2019-05-20 4
2019-05-21 3
Name: column, dtype: int64
答案 1 :(得分:0)
我建议使用熊猫。假设您的日期列称为date
。由于您的date
是日期时间对象,因此您可以按日期分组并使用transform
方法
df = pd.read_csv('hello.csv')
df['date'] = pd.DatetimeIndex(df.date).normalize()
df['count'] = df.groupby('date')['date'].transform('count')
df = df[['date','count']]
现在,您有了一个具有所需内容的新数据框。
答案 2 :(得分:0)
要计数元素时,Python集合模块提供了Counter
类,可用作字典{element_name: count}
。我将假设您的parse
函数可以满足您的要求。该代码可以简单地是:
with open('hello.csv', 'r', encoding="latin-1") as csvfile:
readCSV=csv.reader(csvfile, delimiter=',')
counter = collections.Counter((parse(row[1]).date() for row in readCSV))
print(counter)
使用您期望的数据,它应该打印:
Counter({'2004-01-05': 7, '2004-01-06': 5})