Как считать записи в день в CSV-файле? - PullRequest
0 голосов
/ 21 мая 2019

У меня есть 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-файла.Когда у меня есть 7 записей на 2004-01-05 и 5 на 2004-01-06, векторное число должно выглядеть как count = [7 5], например

Ответы [ 3 ]

0 голосов
/ 21 мая 2019

Я предлагаю использовать Панд. Скажем, ваш столбец даты называется 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']]

Теперь у вас есть новый фрейм данных с тем, что вы хотите.

0 голосов
/ 21 мая 2019

Если вы хотите считать элементы, модуль коллекций 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})
0 голосов
/ 21 мая 2019

Вы можете выполнить следующую процедуру.

  • Преобразовать в объект даты и времени.
  • Создать столбец, содержащий только дату (удалить время).
  • Группировка по новому столбцу даты.
  • Подсчитайте объекты.
# 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
...