Попробуйте что-то вроде этого:
from lxml import etree
import requests
resp = requests.get(url)
doc = etree.fromstring(resp.content)
headers = []
dates = []
columns = []
fop = doc.xpath('//Series[@FUNDRATE_OBS_POINT]')
datpath = fop[0].xpath('//*[@*="ns13:ObsType"]')
for dat in datpath:
dates.append(dat.attrib.get('TIME_PERIOD'))
for item in fop:
headers.append(item.attrib.get('FUNDRATE_OBS_POINT'))
entries = item.xpath('//*[@*="ns13:ObsType"]')
column = []
for entry in entries:
column.append(entry.attrib.get('OBS_VALUE'))
columns.append(column)
df = pd.DataFrame(columns=headers,index=dates)
for a, b in zip(headers,columns):
df[a] = b
df.head(3)
Вывод:
1% 25% 50% 75% 99% TARGET_HIGH TARGET_LOW
2020-04-02 0.03 0.03 0.03 0.03 0.03 0.03 0.03
2020-04-01 0.03 0.03 0.03 0.03 0.03 0.03 0.03
2020-03-31 0.01 0.01 0.01 0.01 0.01 0.01 0.01