Python CSV比较与乘法

2024-04-20 09:05:08 发布

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

我想再次检查一下在Python中如何将其组合在一起的逻辑,因此示例将很受欢迎。在

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

我需要把这两者都拉进来,并用特定的值(5)乘以第2行、第2列到第6列,分别合计,然后相互比较(CSV2 total/CSV1 total),并以百分比格式表示。在

导入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'

Tags: csvinforopenfile1outfilefile2int
2条回答
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])

只是一个快速的组合,你所描述的,没有非标准模块。在

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

注意,在导入pandas之后,有一个全局级别read_csv,其名称与pandas.read_csv("/path/to/file.csv")相同,而不需要像上面链接的doc页面那样通过io.parsers。在

通过标准模块来做这件事没有什么错;我只是觉得如果你打算做聚合或广播的数学运算,Pandas提供的使用高效NumPy数学运算的矩形数组是最好的选择。在

相关问题 更多 >