Преобразование панд DF в json Python 3
У меня есть XML-файл, как это, который является серией в следующем DF
userid | fid | response
-----------------------
1125 | 58940 | xml1
3344 | 47839 | xml2
3455 | 12335 | xml3
Столбец ответа содержит грязный XML-файл. Проблема в том, чтобы очистить XML-файлы, а затем изменить df на json. XML-файлы также должны быть преобразованы в json. Ожидаемый результат примерно такой:
"userid" : 1125,
"fid" : 58940,
"response" : "xml(in json)"
В моем текущем коде я очистил XML и вставил его обратно в DF. Должен ли я сначала преобразовать xml в json, а затем вставить в DF или вставить в DF, а затем преобразовать всю строку в json? Я думаю, что я должен сначала преобразовать XML в JSON, а затем вставить в DF. Мой текущий код выглядит так:
import pandas as pd
import re
from xml.dom import minidom
raw_data = pd.read_csv('C:\\Users\\Desktop\\xml.csv', sep = '|')
df = pd.DataFrame(raw_data, columns = ['userid', 'fid', 'response'])
file = open("testfile.txt", "w")
file.write(df.loc[0][2])
file.close()
# Cleaning the XML.
with open("testfile.txt") as f:
file = f.read()
# Replace up to <?xml tag.
file = re.sub(r'\A.*(<\?xml.*)\Z', r'\1', file, flags = re.S)
# Strip file and add \n at each instance of >.
file = file.strip()
file = file.replace('>', '>\n')
# Split file and make a list with no empty items.
file_list = file.split('\n')
file_list = [item for item in file_list if item != '']
# Remove unwanted xml declarations.
if file_list[0][:5] == '<?xml':
del file_list[0]
if file_list[0][:13] == '<creditBureau':
del file_list[0]
if file_list[-1] == '",':
del file_list[-1]
if file_list[-1] == '</creditBureau>':
del file_list[-1]
if file_list[1501] == '<highRiskFraudAlert searchStatus=""availableClear""/>':
file_list[1501] = '<highRiskFraudAlert searchStatus="availableClear"/>'
# Adding <root> element
file_list.insert(0, '<root>')
file_list.append('</root>')
# Conveting to String and writing to new xml file.
str = ''.join(file_list)
with open("final_xml.xml","w") as f:
f.write(str)
#parsing xml
tree = ET.parse('final_xml.xml')
pretty_xml = minidom.parseString(str).toprettyxml(indent = " ")
print(pretty_xml)
Есть подсказки или решения?