2017-02-08 2 views
1

を照会たちは、私が辞書にCLIENT_ID、PROPERTY_ID、FROM_YEARの各ユニークな組み合わせを渡すためにしようとしていますので、私はできるCSVのpythonパンダループにデータの3列のペアを渡すとMySQLが

PROPERTY_ID,CLIENT_ID,FROM_YEAR 
1,5,2015 
2,6,2015 
3,9,2015 
4,9,2015 

を持っていると仮定しますMySQLの問い合わせに "PROPERTY_ID、CLIENT_ID、FROM_YEAR" ペアを置く:

for i in CLIENT_ID 

    do 

    connect to MySQL 

    SELECT * FROM DATABASE_${CLIENT_ID}.TABLE WHERE PROPERTY IN ${PROPERTY_ID} AND FROM_YEAR = ${FROM_YEAR}; 

    disconnect to MySQL 

done 

実数ように、ではないパラメータ:

for i in CLIENT_ID 

    do 

    connect to MySQL 

    SELECT * FROM DATABASE_9.TABLE WHERE PROPERTY IN ('3','4') AND FROM_YEAR = 2015; 

    disconnect to MySQL 

done 

今、私は考えることができるソリューションが辞書にPythonのパンダフレームを変換することです:

df=pd.read_csv('test.csv') 

df2=df.T.to_dict('list') 

しかし、それは興味深いキーの辞書を返します。値のペア:

インデックス:(CLIENT_ID、PROPERTY_ID 、FROM_YEAR)

{0: [5, 1,2015], 1: [6, 2,2015], 2: [9, 3,2015], 3: [9, 4,2015]} 

さらに簡単な解決方法はありますか?

< < < < < < < < < < < < < < < < < < < < >>>>>>>>>>>>>>>>>>>>>>>>>>

こんにちは@piRSquared、

にあなたの答えをありがとう>>>>>。私たちが次のことをする方法はありますか?

1st round: 
$CLIENT_ID,$PROPERTY_ID,$FROM_YEAR=5,1,2015 

2nd round 
$CLIENT_ID,$PROPERTY_ID,$FROM_YEAR=6,2,2015 

3rd round 
$CLIENT_ID,$PROPERTY_ID,$FROM_YEAR=9,3,2015 

4th round 
$CLIENT_ID,$PROPERTY_ID,$FROM_YEAR=9,4,2015 

我々のようなSQLクエリをプリントアウトすることができるように:

for CLIENT_ID in [x[0] for x in df2]: 

    CLIENT_ID=CLIENT_ID.astype('str') 

    print "SELECT * FROM client"+CLIENT_ID 

    for PROPERTY_CODE in [y[1] for y in df2]: 

     PROPERTY_CODE=PROPERTY_CODE.astype('str') 

     print "WHERE PROPERTY_ID = "+PROPERTY_CODE 

が、それは次のように返し、我々が探しているではありません。

SELECT * FROM client_5 WHERE PROPERTY_ID = 1 and FROM_YEAR = 2015; 

SELECT * FROM client_6 WHERE PROPERTY_ID = 2 and FROM_YEAR = 2015; 

SELECT * FROM client_9 WHERE PROPERTY_ID = 3 and FROM_YEAR = 2015; 

私は、リストの内包表記を使用しようとしましたfor:

SELECT * FROM client_5 
WHERE FK_PROPERTY_ID = 1 
WHERE FK_PROPERTY_ID = 2 
WHERE FK_PROPERTY_ID = 3 
WHERE FK_PROPERTY_ID = 4 

啓発できますか?ありがとう。

+1

drop_duplicatesループ内で接続/切断を持ってひどく遅いです! –

答えて

1

セットアップ

txt = """PROPERTY_ID,CLIENT_ID,FROM_YEAR 
1,5,2015 
2,6,2015 
3,9,2015 
4,9,2015 
""" 

df = pd.read_csv(StringIO(txt)) 

オプション1
apply + tuple + unique

df.apply(tuple, 1).unique().tolist() 

[(1, 5, 2015), (2, 6, 2015), (3, 9, 2015), (4, 9, 2015)] 

オプション2
リスト内包+

[tuple(x) for x in df.drop_duplicates().values] 

[(1, 5, 2015), (2, 6, 2015), (3, 9, 2015), (4, 9, 2015)] 
+0

こんにちはpiRSquared、あなたの種類の答えをありがとう。トリックを学ぶ!私は上記に答えました。手伝ってくれる?ありがとう! – Chubaka

関連する問題