#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)
и проверьте вывод, ошибка вполне понятна, хотя и не воспроизводима — эти столбцы не существуют в dataframe4. @AkshaySehgal мой код на python находится в обновлении.
5. @Manakin Я использовал тот же оператор печати, и у меня были эти столбцы в моем фрейме данных.
Ответ №1:
При использовании print(pd.json_normalize(api_list).columns)
я обнаружил, что requesturl не было правильным именем столбца. Как только я изменил это, он запустился.