2017-07-13 9 views
1
pysql = lambda q: pdsql.sqldf(q, globals()) 
    str1 = "select coalesce(ID1, H_ID, [Alternate Source Unique 
    Identifier]) as Master_ID, [Alternate Source Unique Identifier] as Q_ID 
    from crosswalk;" 
    with Timer("Load master_ids:"): 
    master_id_list = pysql(str1) 
    print("Records: {}".format(len(master_id_list))) 
    master_id_list.head() 

pySQL fonctionne en seulement 5 secondes !!voulez utiliser panda pour faire ressembler/travailler comme sql

Je veux écrire le second script en python parce que je ne peux pas utiliser pysql :(, toute idée? La meilleure traduction du second script en python s'il vous plaît?

Je l'ai fait 2 propositions, mais pas vraiment efficace en terme de temps la première sans Pandas (qui est le nécessaire)

def coalesce (df, column_names): 
    i=iter(column_names) 
    column_name=next(i) 
    answer=df[colum_name] 
    for column_name in i: 
    answer = answer.fillna(df[column_name]) 
    return answer 
    coalesce(df, ['first', 'third', 'second']) 

Merci pour vos conseils!

+0

pourquoi vous utilisez le '' copie() '' méthode? Je pense que cela crée beaucoup de frais généraux. – Dimgold

+0

Merci, que suggérez-vous au lieu de copier? –

Répondre

0

Si tout ce que vous avez besoin est de compter le nombre d'enregistrements (len(master_id_list)), vous pouvez ju st utiliser directement:

crosswalk['ID'].size

ou

crosswalk.shape

si vous êtes à la recherche des valeurs uniques, essayez:

crosswalk['ID'].unique().size

+0

Merci Ok pour ça, mais j'ai besoin de reformuler le premier script en utilisant l'idée du script 2 ... est-ce que ça fait sens? –

+0

Il me manque peut-être quelque chose - n'imprimez-vous pas simplement le nombre de résultats? – Dimgold

+0

Je veux juste utiliser panda et le faire ressembler à sql ... aussi en termes de performances –