0

我想仔细检查我的逻辑如何在 Python 中将它们组合在一起,因此非常感谢示例。

我需要比较 2 个 CSV 文件(格式完全相同,2 行 6 列)并提供差异。

我需要将第 2 行、第 2-6 列与特定值 (5) 相乘,然后分别合计,然后相互比较(CSV2 总计/CSV1 总计),并以百分比格式显示。

import csv 和 reader 似乎是要走的路,但对我来说棘手的部分是将其拉入一个列表中,我可以将其与不同的值相乘(或者我应该使用一个集合吗?),然后以最简洁的方式比较两者/高效的方式。

代码更新(基于第二个答案-很棒,谢谢!但现在调用我的行值整数时遇到错误):

import csv
file1 = open('csv1.csv', 'rb')
csv1 = csv.DictReader(file1)

file2 = open('csv2.csv', 'rb')
csv2 = csv.DictReader(file2)


myList = csv2.fieldnames
myList.append('Difference')

outFile = open('outFilename.csv', 'wb')
outCsv = csv.DictWriter(outFile, myList)

file1Dict = dict()
file2Dict = dict()

for row in file1:
    file1Dict[row['key value']]['Total1'] = {'Total1':(int(row[1]) * .75 + int(row[2]) * 2.25 + int(row[3]) * 3.5 + int(row[4]) * 5 + int(row[5]) * 25)}

for row in file2:
    file2Dict[row['key value']]['Total2'] = {'Total2':(int(row[1]) * .75, int(row[2]) * 2.25, int(row[3]) * 3.5, int(row[4]) * 5, int(row[5]) * 25)}

outFile.writeheader()

for stuff in file1Dict:
    file1Dict[stuff]['Difference'] = str(int(int(file1Dict[stuff]['Total2']) / int(file1Dict[stuff]['Total1'])) * 100) + '\%'
    outFile.writerow(file1Dict[stuff])

print 'difference'
4

2 回答 2

0
import csv
file1 = open('filename1.csv', 'rb')
csv1 = csv.DictReader(file1)

file2 = open('filename2.csv', 'rb')
csv2 = csv.DictReader(file2)


myList = csv2.fieldnames
myList.append('Total1','Total2', 'Difference')

outFile = open('outFilename.csv', 'wb')
outCsv = csv.DictWriter(outFile, myList)

file1Dict = dict()
file2Dict = dict()

for rows in file1:
    file1Dict[rows['key value']] = {rows[0], rows[1], 'Total1':int(rows[1]) * 5}

for rows in file2:
    file1Dict[rows['key value']]['Total2'] = {'Total2':int(rows[1]) * 5}

outFile.writeheader()

for stuff in file1Dict:
    file1Dict[stuff]['Difference'] = str(int(int(file1Dict[stuff]['Total2']) / int(file1Dict[stuff]['Total1'])) * 100) + '\%'
    outFile.writerow(file1Dict[stuff])

只是将您描述的内容快速组合在一起,没有非标准模块。

于 2013-01-23T20:05:43.220 回答
0

我认为您应该使用Python Pandas和内置read_csv函数,因为这将非常有效,并将其放入矩形形式中,任何类型的数学运算都可以轻松应用,并且易于在两个不同的导入数据集之间进行比较。

请注意,在导入之后pandas,有一个全局级别,就像上面链接的文档页面中那样read_csv调用pandas.read_csv("/path/to/file.csv")而不是需要经过。io.parsers

通过标准模块执行此操作没有任何问题;我只是认为,如果您打算进行聚合或广播数学运算,那么 Pandas 提供的使用高效 NumPy 数学运算的矩形数组是最佳选择。

于 2013-01-23T18:03:52.997 回答