0

これを Python でまとめる方法についてロジックを再確認したいので、例を示していただければ幸いです。

2 つの CSV ファイル (2 行 6 列でまったく同じ形式) を比較し、違いを提供する必要があります。

行 2 の列 2 ~ 6 を特定の値 (5) で乗算して乗算し、それらを別々に合計してから、互いに比較し (CSV2 合計/CSV1 合計)、パーセンテージ形式で表示する必要があります。

import csv と reader は進むべき道のように思えますが、私にとってトリッキーな部分は、異なる値に対して乗算できるリストにそれを引き込み (またはコレクションを使用する必要がありますか?)、2 つを最も簡潔に比較することです/効率的な方法。

コードの更新 (2 番目の回答に基づく - すばらしい、ありがとう! しかし、行の値の整数を呼び出すとエラーが発生しました):

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

Python Pandasと組み込み関数を使用する必要があると思います。read_csvこれは非常に効率的であり、あらゆる種類の数学演算を適用するのが簡単で、2つの異なるインポートされたデータセット間で簡単に比較できる長方形の形式になります。

インポート後、上記のリンクされたドキュメントページのように通過する必要はなく、と同じように呼び出されるpandasグローバルレベルがあることに注意してください。read_csvpandas.read_csv("/path/to/file.csv")io.parsers

標準モジュールを介してこれを行うことには何の問題もありません。集計またはブロードキャストされた数学演算を実行する場合は、効率的なNumPy数学演算を使用するPandasが提供する長方形の配列が最適だと思います。

于 2013-01-23T18:03:52.997 に答える
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 に答える