使用cs读取和计算

2024-04-18 11:42:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python还不熟悉,如果这个问题听起来很傻,请原谅-

我有一个csv文件,它有两列-Value and Timestamp。我正在尝试编写一个代码,它将使用2个参数-start_dateend_date,遍历csv文件以获取这两个日期之间的所有值,并打印Value的总和

下面是我的代码。我正在尝试读取并存储列表中的值。你知道吗

f_in = open('Users2.csv').readlines()
Value1 = []
Created = []
for i in range(1, len(f_in)):
    Value, created_date = f_in[i].split(',')
    Value1.append(Value)
    Created.append(created_date)

print Value1
print Created

我的csv格式如下

10  2010-02-12 23:31:40
20  2010-10-02 23:28:11
40  2011-03-12 23:39:40
10  2013-09-10 23:29:34
420 2013-11-19 23:26:17
122 2014-01-01 23:41:51

当我运行代码时-File1.py如下所示

File1.py 2010-01-01 2011-03-31

输出应该是70

我遇到了以下问题-

  1. csv中的数据是时间戳(created\u date),但是传递的参数应该是date,我需要转换并获取这两个日期之间的数据,而不考虑时间。你知道吗
  2. 一旦我把它列在清单上-如上所述-我该如何继续进行我的计算,考虑到第1点的条件

Tags: 文件csv数据代码inpy参数date
3条回答

你可以试试这个:

import csv

data = csv.reader(open('filename.csv'))
start_date = 10
end_data = 30

times = [' '.join(i) for i in data if int(i[0]) in range(start_date, end_date)]

如果您愿意使用pandas,请尝试以下方法:

>>> import pandas as pd
>>> data = 'Users2.csv'
>>>
>>> dateparse = lambda x: pd.datetime.strptime(x, '%Y-%m-%d %H:%M:%S')
>>> df = pd.read_csv(data, names=['value', 'date'], parse_dates=['date'], date_parser=dateparse)

>>> result = df['value'][(df['date'] > '2010-01-01') &
...                      (df['date'] < '2011-03-31')
...                 ].sum()
>>> result
70

enter image description here

取决于文件大小,但可以考虑将csv文件中的值放入某个数据库,然后查询结果。你知道吗

csv模块有DictReader允许您预定义列名,它极大地提高了可读性,特别是在处理非常大的文件时。你知道吗

from datetime import datetime

COLUMN_NAMES = ['value', 'timestamp']


def sum_values(start_date, end_date):
    sum = 0

    with open('Users2.csv', mode='r') as csvfile:
        table = csv.DictReader(csvfile, fieldnames=COLUMN_NAMES)
        for row in table:
            if row['timestamp'] >= min_date and row['timestamp'] <= max_date:
                sum += int(row['value'])
    return sum

相关问题 更多 >