如何计算csv文件中每天的条目?

时间:2019-05-21 08:15:30

标签: python csv datetime count

我有一个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]

3 个答案:

答案 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})