2017-09-11 4 views
0

ためのpythonで私は、この形式のExcelシートを持っている:が存在しないか、いないループ

from amount to 

314 $470.21 275 

12 $1,788.98 149 

316 $2,949.53 417 

5 $2,193.48 454 

198 $1,402.76 371 

82 $1,212.14 420 

222 $1,167.72 396 

とループのために、すべてのCSVデータをレンダリング:

import csv 

def csv_data(path): 
    with open(path) as csv_file: 
     readCSV = csv.DictReader(csv_file) 

     for line in readCSV: 
      col_from = line['from'] 
      col_to = line['to'] 
      col_ammount = line['amount'] 
      print(col_from, col_amount, col_to) 

csv_data('transactions.csv') 

たとえば "にfrom column "私は値314を見つけました。どのようにしてこの値が存在するかどうかを「列に」のすべての値をチェックすることができます。実際には、すべての口座番号の現在の残高を計算したいと思います。

forループで条件を正しく追加するにはどうすればよいですか?

私はあなたがこのような何かを探している与える
+0

現在の残高の計算方法を教えてください。 – katrik

+0

パンダパッケージを試しましたか? –

+0

すべてのファイルを読み込んだ後、sum([x ['from']をreadCSVで使用する])を使用してください。 –

答えて

0

..

for line in readCSV: 
    if line['form']: 
     #do something if "from" exist 
    else: 
     #do something if "from" do not exit 
    if line['to']: 
     # do something if "to" exist 
    else: 
     # do something if "to" do not exit 
    if line['amount']: 
     #do something if "amount" exist 
    else: 
     #do something if "amount" do not exist 
0

私はあなたの主な問題は、あなたが何度も何度もcol_fromcol_tocol_amountリストを上書きしていることだと思います。ループ内から値を印刷すると、すべての値がそのリストに格納されていると思うようになることがあります。試して、forループの外側にprint(col_from, col_amount, col_to)を呼び出すと、最後の要素だけが取得されます。より良い方法は、空のリストを作成し、項目をappendにすることです。

第2に、int型で浮動小数点型のデータフォーマットに気をつけるべきですが、csv.DictReaderは、マトリックス内のすべての要素の文字列を返します。

col_fromの値がcol_toにも現れているかどうかを確認することは、リストの理解で簡単に実行できます。あなたの条件が適用されるすべての行に対して「真」、そうでない場合に「偽」を含むリストを作成することができます(すべてのサンプルデータの場合)。あなたのソリューションに近い

の提案は次のようになります。

あなたが成功した「から」から値を格納することができますし、リスト内の列「から」、あなたが交差点の操作を行うことができますと仮定
import csv 

def csv_data(path): 
    with open(path) as csv_file: 
     readCSV = csv.DictReader(csv_file, delimiter=";", quoting=csv.QUOTE_NONE) # supposed that your delimiter is ";", otherwise use , or \tab 

     col_from, col_to, col_amount = [], [], [] # initialize empty lists 

     for line in readCSV: # append entries to your lists 
      col_from.append(int(line['from'])) 
      col_to.append(int(line['to'])) 
      col_amount.append(float(line['amount'])) 

     bool_list = [True if col_from[i] in col_to else False for i in range(len(col_from))] # A list with Trues and Falses 
     return bool_list 

print csv_data('transactions.csv') 
# out: [False, False, False, False, False, False, False] 
0

リストの両方に存在するすべての共通の値を取得します。今

col_from = [314, 12, 316, 5, 198, 82, 222] 
col_to = [275, 149, 417, 454, 371, 420, 396] 
intersection = list(set(col_from) & set(col_to)) 

intersectionは、この場合には空のリストになりますリスト、両方からのすべての一般的な値が含まれている必要があります。特定の値を少し変更して検索することもできます

list(set([314]) & set(col_to)) 
関連する問題