2017-02-08 13 views
1

Предположим, у нас есть файл CSVпитона панды прохождение 3 столбцов пар данных в петлю и MySQL запросов

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

Я пытаюсь передать каждое уникальное сочетание CLIENT_ID, PROPERTY_ID, FROM_YEAR в словарь, так что я могу ставят "PROPERTY_ID, CLIENT_ID, FROM_YEAR" пара в запросах MySQL:

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 

Теперь решение я могу думать о том, чтобы превратить питон панда кадра в словарь:

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, как:

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 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 FK_PROPERTY_ID = 1 
WHERE FK_PROPERTY_ID = 2 
WHERE FK_PROPERTY_ID = 3 
WHERE FK_PROPERTY_ID = 4 

Не могли бы вы просветить? Благодарю.

+1

Жутко медленно, чтобы подключить/отключить внутри цикла! –

ответ

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
список постижение + drop_duplicates

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

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

привет, спасибо за ваш добрый ответ. Изучение трюка! Я ответил выше. Не могли бы вы помочь? Благодаря! – Chubaka