Как удалить столбец в pandas

#python #pandas

#python #pandas

Вопрос:

У меня возникли проблемы с отладкой, почему я не могу удалить столбцы в моем файле python, тогда как в моем ноутбуке я могу удалить столбцы из моего фрейма данных просто отлично.

Вот мой код для моего ноутбука:

 api_list = [{"requesturl":"http://www.request_url.com","clientid":"123456789","adjustedsummaryguidelines":{"midrangeallabsence":46,"midrangeclaims":36,"atriskallabsence":374,"atriskclaims":98},"riskassessment":{"score":87.95,"status":"Red (Extreme)","magnitude":"86.65","volatility":"89.25"},"adjustedduration":{"bp":{"days":2},"cp95":{"alert":"yellow","days":185},"cp100":{"alert":"yellow","days":365}},"icdcodes":[{"code":"719.41","name":"Pain in joint, shoulder region","meandurationdays":{"bp":18,"cp95":72,"cp100":93}},{"code":"840.9","name":"Sprains and strains of unspecified site of shoulder and upper arm","meandurationdays":{"bp":10,"cp95":27,"cp100":35}}],"cfactors":{"legalrep":{"applied":"1","alert":"red"}},"alertdesc":{"red":"Recommend early intervention and priority medical case management.","yellow":"Consider early intervention and priority medical case management."}}
,{"clientid":"987654321","adjustedsummaryguidelines":{"midrangeallabsence":25,"midrangeclaims":42,"atriskallabsence":0,"atriskclaims":194},"riskassessment":{"score":76.85,"status":"Orange (High)","magnitude":"74.44","volatility":"79.25"},"adjustedduration":{"bp":{"days":2},"cp95":{"days":95},"cp100":{"alert":"yellow","days":193}},"icdcodes":[{"code":"724.2","name":"Lumbago","meandurationdays":{"bp":10,"cp95":38,"cp100":50}},{"code":"847.2","name":"Sprain of lumbar","meandurationdays":{"bp":10,"cp95":22,"cp100":29}}],"cfactors":{"legalrep":{"applied":"1","alert":"red"}},"alertdesc":{"red":"Recommend early intervention and priority medical case management.","yellow":"Consider early intervention and priority medical case management."}}]

strategic_df = pd.json_normalize(api_list).drop(['requesturl','icdcodes', 'adjustedsummaryguidelines.midrangeallabsence','adjustedsummaryguidelines.midrangeclaims'
                                 , 'adjustedduration.cp100.alert', 'adjustedduration.cp100.days', 'cfactors.legalrep.applied', 'cfactors.legalrep.alert'
                                 , 'alertdesc.red', 'alertdesc.yellow'], axis = 1)
 

фрейм данных создается так, как требуется.

`

Полный код в файле python:

 #Storing results
api_results = []
error_results = []


print('Starting XML loop')

with open("C:/Users/test_sc_ras.csv") as f: 
   reader = csv.DictReader(f)

   # WRITING TO XML NODES 
   for i, row in enumerate(reader, start=1):
       # INITIALIZING XML FILE
       root = ET.Element('cbcalc')

       icdNode = ET.SubElement(root, "icdcodes")
        #handling first level ICD codes
       for code in row['D'].split('~'):
           ET.SubElement(icdNode, "code").text = code

           #handling Client ID, state, country, age, job class and output
       ET.SubElement(root, "clientid").text = row['CLAIM_NUM']
       ET.SubElement(root, "state").text = row['BEN_ST']
       ET.SubElement(root, "country").text = "US"  
       ET.SubElement(root, "age").text = row['AGE']
       ET.SubElement(root, "jobclass").text = "1" 
       ET.SubElement(root, "fulloutput").text ="Y"

       #handling the cfactors:
       cfNode = ET.SubElement(root, "cfactors")
       for k in ['legalrep', 'depression', 'diabetes',
                 'hypertension', 'obesity', 'smoker', 'subabuse']:
           ET.SubElement(cfNode, k.lower()).text = str(row[k])

       psNode = ET.SubElement(root, "prosummary")

       psicdNode = ET.SubElement(psNode, "icd")
       for code in row['P'].split('~'):
           ET.SubElement(psNode, "code").text = code

       psndcNode = ET.SubElement(psNode, "ndc")
       for code in row['NDC_codes'].split('~'):
           ET.SubElement(psNode, "code").text = code 

       cptNode = ET.SubElement(psNode, "cpt")
       for code in row['CPT_codes'].split('~'):
           ET.SubElement(cptNode, "code").text = code

       ET.SubElement(psNode, "hcpcs")

       doc = ET.tostring(root, method='xml', encoding="UTF-8")
       response = requests.post(target_url, data=doc, headers=login_details)
       response_data = json.loads(response.text)
       if type(response_data)==dict and 'error' in response_data.keys():
           error_results.append(response_data)
       else:
           api_results.append(response_data)

print('creating dataframe')
strategic_df = pd.json_normalize(api_results).drop(['requesturl','icdcodes', 'adjustedsummaryguidelines.midrangeallabsence','adjustedsummaryguidelines.midrangeclaims'
                                 , 'adjustedduration.cp100.alert', 'adjustedduration.cp100.days', 'cfactors.legalrep.applied', 'cfactors.legalrep.alert'
                                 , 'alertdesc.red', 'alertdesc.yellow'], axis = 1)



print("Writing out csv file")
strategic_df.to_csv(r'C:Userscomp_dataframe.csv', index = False, header=True)
 

В моем файле python я получаю следующую ошибку:
KeyError: "['requesturl' 'icdcodes' 'adjustedsummaryguidelines.midrangeallabsence'n 'adjustedsummaryguidelines.midrangeclaims' 'adjustedduration.cp100.alert'n 'adjustedduration.cp100.days' 'cfactors.legalrep.applied'n 'cfactors.legalrep.alert' 'alertdesc.red' 'alertdesc.yellow'] not found in axis"

Что я сделал не так?

Комментарии:

1. Какая у вас версия pandas? Я не могу воспроизвести ошибку, которую вы получаете. Для меня код работает абсолютно нормально.

2. Можете ли вы предоставить точную копию кода, который вы пишете в файле python?

3. print(pd.json_normalize(api_list).columns) и проверьте вывод, ошибка вполне понятна, хотя и не воспроизводима — эти столбцы не существуют в dataframe

4. @AkshaySehgal мой код на python находится в обновлении.

5. @Manakin Я использовал тот же оператор печати, и у меня были эти столбцы в моем фрейме данных.

Ответ №1:

При использовании print(pd.json_normalize(api_list).columns) я обнаружил, что requesturl не было правильным именем столбца. Как только я изменил это, он запустился.