Основываясь строго на xml в вашем вопросе, я думаю, что вы ищете что-то вроде этого:
serial = """[your xml above]"""
from lxml import etree
import pandas as pd
content = serial.encode('utf-8')
doc = etree.XML(content)
targets = doc.xpath('/BPS/Machine/ParameterSection')
data = []
for target in targets:
data.append(target.xpath("../@SerialNumber")[0])
data.append(target.xpath("./@Number")[0])
data.append(target.xpath("./Operator/text()")[0])
data.append(target.xpath("./HeadercardUnit/@DepositID")[0])
data.append(target.xpath("./HeadercardUnit/@StartTime")[0])
counters = target.xpath("./HeadercardUnit/Counter")
vals = []
nums = []
for counter in counters:
vals.append(counter.xpath('./@Value')[0])
nums.append(counter.xpath('./@Number')[0])
data.append(vals)
data.append(nums)
columns = ['serial', 'control' , 'oper','dep_num' , 'dep_time','Value','Number']
pd.DataFrame([data],columns=columns)
Вывод:
serial control oper dep_num dep_time Value Number
0 2602 123456789 123456789 123456789 2020-04-03 09:15:18 [500, 1000, 1000, 2000, 5000, 5000] [17, 31, 3, 5, 27, 5]
Очевидно, вы можете играть с структура фрейма данных, чтобы приспособить его к вашим потребностям.