2016-10-17 8 views
0

私は、次のやろうとしているに追加します。ベクトル化のMySQLの検索、およびデータフレーム

  1. 列]のCol1 'と「Col2に」
  2. 内の各行を取る'が含まれDATAFRAME、通過しますCOL1' は、私がループアプローチのために傾いていた結果

とCol2に 『、

  • は、内の同じ行の値を交換し、その値を使用してdbがMySQLを検索』が、より高速なベクトル化アプローチがあります。私がこれまで使用していラフコード:

    rsp_df = pd.DataFrame(pd.read_csv(raw_data_path)) 
    cur = mydb.cursor() 
    
    for x in rsp_df['Col1']: 
        query = ("SELECT stuff FROM some-table WHERE Asin = '%s'" % str(x)) 
        cur.execute(query) 
        rows = cur.fetchone() 
        print rows 
    

    どうもありがとう!

  • 答えて

    1

    クエリを別のデータフレームにインポートすることで、MySQLクエリとPandasデータフレームをマージすることを検討してください。このようにすると、一度にすべてのケースをループさせることなく一致させることができ、1回の呼び出しで列の条件付き変更を行うことができます。

    以下はleft結合結合で、すべてのレコードをrsp_dfに一致させておくかどうかを示します。見つからないstuffからのmydfは、比類のないレコードを示します。

    from sqlalchemy import create_engine 
    
    engine = create_engine('mysql://user:[email protected]/database') 
    
    mydf = pd.read_sql("SELECT stuff FROM some-table", con=engine) 
    
    merged_df = pd.merge(rsp_df, mydf, left_on=['Col1'], right_on=['Asin'], how='left') 
    
    mergedf.loc[pd.notnull(mergedf['Asin']), 'Col2'] = mergedf['result'] 
    
    :次に、あなたは(私はあなたが 結果、クエリの ものでおそらく列と呼ぶものを確認していない)が必要 結果Col2にを置き換えることができます
    関連する問題