2017-03-25 4 views
0

Hier sind die ersten 20 Zeilen meiner Textdatei, ich habe solche 50K Zeilen.Python Dict und Funktion funktioniert nicht

prov_type|prov_type_desc 
0|FAMILY PRACTICE/CLINIC 
1|FAMILY PRACTICE 
2|ALLERGIST 
3|DERMATOLOGIST 
4|INTERNIST 
5|NEUROLOGIST 
6|NEUROSURGEON 
7|OB/GYN 
8|OPTHAMOLOGIST 
9|ORTHOPEDIST 
10|OTOLARYNGOLOGIST 
11|PATHOLOGIST 
12|PEDIATRICIAN 
13|PLASTIC SURGEON 
14|COLON AND RECTAL SURGERY 
15|PSYCHIATRIST 
16|RADIOLOGIST 
17|SURGEON 
18|THORACIC SURGEON 
19|UROLOGIST 
20|ANESTHESIOLOGIST 

Ich bin wie die Lektüre dieses,

ovations = pd.read_csv("Ovations.txt",sep='|',dtype=object) 
ovations.rename(columns={'prov_type_desc':'specialty'},inplace=True) 

Ich schrieb ein Wörterbuch, um Spezialität zu entsprechen, hier die dict ist.

options = {'FAMILYPRACTICESELF-REFFERAL' : 'FAMILY PRACTICE', 
'FAMILYPRACTICESPECIALIST' : 'FAMILY PRACTICE', 
'FAMILYPRACTICE/CLINIC' : 'FAMILY PRACTICE', 
'GENERALPRACTICE' : 'FAMILY PRACTICE', 
'ALLERGY' : 'ALLERGIST', 
'ALLERGYANDIMMUNOLOGY' : 'ALLERGIST', 
'ALLERGY&IMMUNOLOGY' : 'ALLERGIST', 
'ALLERGY/IMMUNOLOGY' : 'ALLERGIST', 
'CARDIOLOGY' : 'CARDIOLOGIST', 
'CARDIOLOGYGROUP' : 'CARDIOLOGIST', 
'CARDIOVASCULARDISEASE' : 'CARDIOLOGIST', 
'COLON&RECTALSURGERY' : 'COLON AND RECTAL SURGERY', 
'COLON/RECTALSURGERY' : 'COLON AND RECTAL SURGERY', 
'COLORECTALSURGERY' : 'COLON AND RECTAL SURGERY', 
'DERMATOLOGYGROUP' : 'DERMATOLOGIST', 
'DERMATOLOGY' : 'DERMATOLOGIST', 
'ENDOCRINOLOGY,DIABETES,ANDMETABOLISM' : 'ENDOCRINOLOGIST', 
'ENDOCRINOLOGY' : 'ENDOCRINOLOGIST', 
'ENDODONDIST' : 'ENDODONTICS', 
'GASTROENTEROLOGY' : 'GASTROENTEROLOGIST', 
'GASTROENTEROLOGYGROUP' : 'GASTROENTEROLOGIST', 
'GENETICCOUNSELOR' : 'GENETIC TESTING/COUNSELING CENTER', 
'GENETICS,CLINICAL(MD)' : 'GENETIC TESTING/COUNSELING CENTER', 
'GENETICS,CLINICALMOLECULAR' : 'GENETIC TESTING/COUNSELING CENTER', 
'HEMATOLOGYONCOLOGY' : 'HEMATOLOGY/ONCOLOGY', 
'HEMATOLOGIST' : 'HEMATOLOGY/ONCOLOGY', 
'HEMATOLOGY' : 'HEMATOLOGY/ONCOLOGY', 
'HEMATOLOGYGROUP' : 'HEMATOLOGY/ONCOLOGY', 
'HEMATOLOGY-ONCOLOGY' : 'HEMATOLOGY/ONCOLOGY', 
'HEMATOLOGY-ONCOLOGYGROUP' : 'HEMATOLOGY/ONCOLOGY', 
'HOSPICE&PALLATIVEMED' : 'HOSPICE', 
'HOSPITALOP/LAB/XRAY' : 'HOSPITAL', 
'HOSPITALIST' : 'HOSPITAL', 
'INFECTIOUSDISEASEMEDICINE' : 'INFECTIOUS DISEASE', 
'INTERNALMED' : 'INTERNAL MEDICINE', 
'INTERNALMEDICINESPECIALIST' : 'INTERNAL MEDICINE', 
'INTERNIST' : 'INTERNAL MEDICINE', 
'INFECTIOUSDISEASESEPCIALIST' : 'INFECTIOUS DISEASE', 
'NEPHROLOGY' : 'NEPHROLOGIST', 
'NEUROLOGY' : 'NEUROLOGIST', 
'OBSTETRICS' : 'OBSTETRICS AND GYNECOLOGY', 
'OBSTETRICS&GYNECOLOGY' : 'OBSTETRICS AND GYNECOLOGY', 
'OBSTETRICS/GYNECOLOGY' : 'OBSTETRICS AND GYNECOLOGY', 
'OB/GYNGROUP' : 'OBSTETRICS AND GYNECOLOGY', 
'OBSTETRICSGYNECOLOGY' : 'OBSTETRICS AND GYNECOLOGY', 
'OBGYNECOLOGISTSPECIALTY' : 'OBSTETRICS AND GYNECOLOGY', 
'OB/GYN' : 'OBSTETRICS AND GYNECOLOGY', 
'OB/GYNSELFREFCAP' : 'OBSTETRICS AND GYNECOLOGY', 
'GYNECOLOGY' : 'OBSTETRICS AND GYNECOLOGY', 
'ONCOLOGY' : 'ONCOLOGIST', 
'GYNECOLOGICONCOLOGY' : 'ONCOLOGIST', 
'GYNECOLOGICALONCOLOGY' : 'ONCOLOGIST', 
'GYNECOLOGICAL/ONCOLOGY' : 'ONCOLOGIST', 
'OPHTHALMOLOGY' : 'OPTHAMOLOGIST', 
'OTOLARYNGOLOGY' : 'OTOLARYNGOLOGIST', 
'OTOLARYNGOLOGY(ENT)' : 'OTOLARYNGOLOGIST', 
'PATHOLOGY' : 'PATHOLOGIST', 
'PATHOLOGYSERVICES' : 'PATHOLOGIST', 
'PATHOLOGY,ANATOMIC' : 'PATHOLOGIST', 
'CYTOPATHOLOGY' : 'PATHOLOGIST', 
'PATHOLOGY,ANATOMICAL&CLINICAL' : 'PATHOLOGIST', 
'PATHOLOGY,BLOOD BANKING/TRANSFUSIONMED' : 'PATHOLOGIST', 
'PATHOLOGY,CLINICAL' : 'PATHOLOGIST', 
'PATHOLOGY,CYTOPATHOLOGY' : 'PATHOLOGIST', 
'PATHOLOGY,DERMATOPATHOLOGY' : 'PATHOLOGIST', 
'PATHOLOGY,HEMATOLOGY' : 'PATHOLOGIST', 
'PATHOLOGY,IMMUNOPATHOLOGY' : 'PATHOLOGIST', 
'PATHOLOGY,NEUROPATHOLOGY' : 'PATHOLOGIST', 
'DERMATOLOGY-DERMATOPATHOLOGY' : 'PATHOLOGIST', 
'DERMATOPATHOLOGY' : 'PATHOLOGIST', 
'PEDIATRICMEDICINE' : 'PEDIATRICIAN', 
'PEDIATRSELFREFCAP' : 'PEDIATRICIAN', 
'PEDIATRICSPECIALTYIALIST' : 'PEDIATRICIAN', 
'PEDIATRICS' : 'PEDIATRICIAN', 
'PEDIATRICSSPECIALTYIALIST' : 'PEDIATRICIAN', 
'PLASTICANDRECONSTRUCTIVESURGERY' : 'PLASTIC SURGEON', 
'PLASTICSURGERY' : 'PLASTIC SURGEON', 
'PLASTICSURGERYWITHINTHEHEAD&NECK' : 'PLASTIC SURGEON', 
'PSYCHIATRY' : 'PSYCHIATRIST'} 

ich eine Funktion wie diese, um schrieb den Wert für den Schlüssel zu erhalten,

def key_in_dic(p): 
    return next((options[x] for x in p if x in options), 'Other') 
ovations['specialty_adj'] = key_in_dic(list(ovations['specialty'])) 

Es ist nicht wie erwartet funktioniert, was das Problem in dieser sein könnte?

Hier ist, wie, ich bekomme, sollte es andere für nicht übereinstimmende Schlüssel whic ist ALLERGIST, aber es ist nicht der Fall.

enter image description here Vielen Dank.

+1

Vielleicht hinzufügen, wie es funktioniert und markieren Sie die Abweichung, wie es sollte? – Dilettant

+1

aktualisiert, bitte überprüfen Sie – subro

+0

Warum verwenden Sie 'options.get (x, default = 'Other')', um einen Standardwert für nicht vorhandene Spezialitäten anzugeben? – Barmar

Antwort

1

Wie Barmar bereits erwähnt, können Sie die get Methode der Wörterbücher verwenden. Ich denke folgendes sollte dir geben, was du willst:

ovations["specialty_adj"] = ovations["specialty"].apply(lambda x: options.get(x, "Other")) 
+0

Vielen Dank, es funktioniert wie erwartet. – subro

+0

Eine weitere Hilfe, ich möchte 'speciality' zurückgeben, wenn es nicht passt, können Sie mir vorschlagen, wie dies zu tun ist? – subro

+0

Glücklich zu helfen. Beachten Sie, dass Sie für den String-Vergleich hier passende Schreibweisen haben müssen, da 'Optionen'' FAMILYPRACTICE/CLINIC' enthalten, im Datenrahmen jedoch 'FAMILY PRACTICE/CLINIC' mit einem Leerzeichen. Je nachdem, was Sie erreichen möchten, können Sie 'options.get (x.replace (" "," ")," Other "' im Lambda-Ausdruck versuchen. Sie sollten diese Antwort jedoch als die richtige akzeptieren. – ValD

1

Verwenden Sie die Methode dict.get(), um einen Standardwert anzugeben, wenn der Schlüssel nicht gefunden wird.

def key_in_dict(p): 
    return (options.get(x, default='Other') for x in p) 
+1

es gibt mir '. subro