Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3中非常大的CSV(大约25-30K行)上的数学运算_Csv_Python 3.x_Average - Fatal编程技术网

Python3中非常大的CSV(大约25-30K行)上的数学运算

Python3中非常大的CSV(大约25-30K行)上的数学运算,csv,python-3.x,average,Csv,Python 3.x,Average,我在之前的一个问题中得到了一些帮助,但是这是一个完全不同的问题,所以我认为一个新的问题将是最好的 每个月我需要解析一个非常大的CSV文件,通常我会在Excel中手动解析,但现在我想在Python中自动解析 CSV的结构如下: [IDNUMBER],[DATE1],[DATE2],[DATE3],[STRING-OF-WHAT-HAPPENED],[DATE3 - DATE2 IN DAYS],[ORIGINAL-FILENAME] 我需要的基本上是打印出以下内容或文件,但我不需要保留这些数据,

我在之前的一个问题中得到了一些帮助,但是这是一个完全不同的问题,所以我认为一个新的问题将是最好的

每个月我需要解析一个非常大的CSV文件,通常我会在Excel中手动解析,但现在我想在Python中自动解析

CSV的结构如下:

[IDNUMBER],[DATE1],[DATE2],[DATE3],[STRING-OF-WHAT-HAPPENED],[DATE3 - DATE2 IN DAYS],[ORIGINAL-FILENAME]
我需要的基本上是打印出以下内容或文件,但我不需要保留这些数据,我只需将其插入一些图表:

对于每个可以多达1200行的原始文件名,我需要平均[DATE3-DATE2 IN DAYS]。例如:

12345,2011-06-12,2011-07-01,2011-07-2,1,['1100.csv']
54321,2011-06-12,2011-07-01,2011-07-3,2,['1100.csv']
23452,2011-06-12,2011-07-01,2011-07-4,3,['1100.csv']
平均值是2,我需要知道这个数字,知道每个文件有多少个也会很有帮助,在这个例子中是3

然后移动到下一个原始文件名,即行中的最后一项,直到CSV结束

在excel中,我会使用autofilter并选择该列中的每个列表,然后只选择[date3-date2]列并获得一个平均值,但这有点繁琐和耗时


谢谢

如果我理解正确,您可以按如下方式操作,希望代码是不言自明的:

您可以使用Python中的“csv”模块来读取文件

import csv

fileHandler = open('yourFile', 'rU')
csvReader = csv.reader(fileHandler)

#Get the first row to initialize variables
firstRow = csvReader.next()
columnToAverage = 5
originalFileColumn = 6
runningDaysSum = atoi(firstRow[columnToAverage])
totalRows = 1
originalFileName = firstRow[originalFileColumn]

result = {}

for row in csvReader:
    #Move to next row
    if originalFileName != row[originalFileColumn]:
        average = runningDaysSum/totalRows
        result[originalFileName] = (average, totalRows)
        originalFileName = row[originalFileColumn]
        totalRows = 0
        runningDaysSum = 0

    runningDaysSum += atoi(row[columnToAverage])
    totalRows += 1

#For last row
result[originalFileName] = (average, totalRows) 

希望有帮助。

好的,我假设您已经打开了文件,可以使用csv读取和解析行。我建议制作一个字典,键是文件名,值是元组:count,datediff之和。大概是这样的:

data = {}
while [read and parse line]:
    datediff = [DATE3 - DATE2]
    if filename not in data:
        data[filename] = (1, datediff)
    else:
        ct, sum = data[filename]
        data[filename] = (ct + 1, sum + datediff)

for fname in sorted(data.keys):
    ct, sum = data[filename]
    avg = sum / ct
    [print]

你的问题是什么?csv模块对此很有用。但我看你已经知道了,对不起。我不知道如何告诉它对所有的原始文件1这样做,然后对所有的原始文件2做同样的事情,因为它们不是我可以手动编码的设置变量。每个月都可能有不同的值。前面的问题还解释了glob模块的用途…我的印象是glob用于路径名匹配,而不是匹配单个文件中的模式。所有这些值都在一个文件中,作为第一个问题中所有其他文件的输出。现在我需要遍历这个文件并执行上面列出的其他操作。如果重新编写程序以输出多个文件更好,我可以这样做,但我认为最好使用一个文件。我不知道如何在这个上下文中使用glob,因为现在所有的数据都在一个文件中。我正在尝试学习如何使用Python,显然我对它不是很有经验。哦,是的,对不起,我以前看过数据,但我忘了其中有文件名。请注意,这段代码假设文件名已排序,但可能不是这样。你是指我的伪代码,这当然比像你这样的完整解决方案更简洁:谢谢你的贡献!感谢您的解决方案,我将对此进行研究,并汇报进展情况!