2017-09-22 8 views
0

2つのCSVファイルがあります。各ファイルには70万行があります。Python - データフレームのパフォーマンスを向上させる方法

ファイルを1行ずつ読み込み、他のファイルと同じ行を見つける必要があります。

その後、2つのファイルデータを1つのファイルデータとして作成します。

しかし、1,000行ごとに約1分かかります!

パフォーマンスを向上させる方法がわかりません。ここで

は私のコードです:

ラインを変更することができます
import pandas as pd 

fail_count = 0 
match_count = 0 
count = 0 

file1_df = pd.read_csv("Data1.csv", sep='\t') 
file2_df = pd.read_csv("Data2.csv", sep='\t') 

columns = ['Name', 'Age', 'Value_file1', 'Value_file2'] 
result_df = pd.DataFrame(columns=columns) 

for row in fil1_df.itterow(): 

    name = row[1][2] 
    position = row[1][3] 

    selected = file2_df[(file2_df['Name'] == name) & (file2_df['Age'] == age)] 

    if selected.empty : 
     fail_count += 1 
     continue 

    value_file1 = row[1][4] 
    value_file2 = selected['Value'].values[0] 

    result_df.loc[len(result_df)] = [name, age, value_file1, value_file2] 

    match_count += 1 

print('match : ' + str(match_count)) 
print('fail : ' + str(fail_count)) 
result_df.to_csv('result.csv', index=False, encoding='utf-8') 

このプロセスを実行する他の方法はありますか?

答えて

1

これはあまりに単純すぎるかもしれませんが、pandas.merge()の機能を試してみましたか?

構文についてはhereを参照してください。あなたのテーブルの場合

:行います

result_df = pd.merge(left=file1_df, right=file2_df, on=['Name', 'Age'], how='inner') 

「内側」に参加、唯一の両方のテーブルに一致する名前&年齢で行を維持します。

+0

OMG !!それは私が欲しいものです! あなたは時間と人生を救う;)ありがとう! – BingbongKim

+0

@BingbongKim、一般的に言えば、パンダのデータフレームで_for_ループを使用している場合は、間違っている可能性があります。もちろんそれには例外があります。 –

関連する問題