2017-12-26 16 views
0

私は2つのcsvを持っていますが、1列の値で行を照合することができます(この列を微調整した後)。マッチングの後、私はそれらの両方からいくつかの値を取って新しい組み合わせの行を作りたいと思う。私はそれらの両方のためcsv.DictReaderを使用して簡単なスクリプトを考え、次にダブルPython with fuzzy、pandas

for row1 in csv1: 
for row2 in csv2: 
    if row1['someID'] == row2['someID]: 
     newdict = ... etc 

はしかし、1つのファイル、9万行であり、他方は500K行です。したがって、私のコードは4.5 * 10^12回の反復を要するでしょう。したがって、私の質問:それらに合う速い方法は何ですか?重要: この 'someID'は一致していますが、csv固有ではありません。 私はすべてのマッチに追加の行が必要です。したがって、 'someID'がcsv1で2回、csv1で2回、 と表示された場合、最終結果でこの 'someID'を持つ6行が必要になります。

+0

両方の列のsomeIDは一意ですか? – Tai

答えて

0

これを試してください:反復処理の代わりに、両方のファイルでpandas.read_csv()を使用して、someIDにマージしてください。例えばhttps://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html

import pandas as pd 
csv1 = pd.read_csv(path1) 
csv2 = pd.read_csv(path2) 
merged = csv1.merge(csv2, on='someID') 
merged['new_column'] = ... 

パンダの操作は、要素レベルで繰り返しよりもはるかに高速であるれる全体numpyのアレイの上にあります。

+0

返信いただきありがとうございますが、問題はcsv1に14kレコードあり、csv2に14Mレコードあります – ramki