【发布时间】:2019-12-16 03:56:16
【问题描述】:
我无法将 XML 导入 python 数据框
您能帮我将 XML 解析为 python 数据框吗? 我似乎无法让它工作 这是我到达了多远:
import xmltodict
import pandas as pd
import requests
from bs4 import BeautifulSoup
def get_xml():
url="http://energywatch.natgrid.co.uk/EDP-PublicUI/PublicPI/InstantaneousFlowWebService.asmx"
headers = {'content-type': 'application/soap+xml; charset=utf-8'}
body ="""<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<GetInstantaneousFlowData xmlns="http://www.NationalGrid.com/EDP/UI/" />
</soap12:Body>
</soap12:Envelope>"""
response = requests.post(url,data=body,headers=headers)
return response.content
response = get_xml()
soup = BeautifulSoup(response, 'lxml')
table_columns = []
for item in soup.find_all(['EDPObjectName'.lower()]):
table_columns.append(item.text)
table_columns=pd.DataFrame(table_columns)
table_rows=[]
for item in soup.find_all(['applicableat']):
table_rows.append(item.text)
df1=pd.DataFrame(table_rows).drop_duplicates()
#df1=pd.to_datetime(df1)
table=[]
for item in soup.find_all(['flowrate']):
table.append(item.text)
df=pd.DataFrame(table)
df_final=pd.DataFrame(df, columns=table_columns, index=df1)
这是我正在寻找的结果:
ALDBROUGH AVONMOUTH BACTON BBL …
2019-08-08T13:00:00 0 1.23 5.1 …
2019-08-08T13:02:00 0 1.23 5.1 …
2019-08-08T13:04:00 0 3.23 5.1 …
2019-08-08T13:06:00 0 3.23 5.1 …
2019-08-08T13:08:00 0 3.23 5.23 …
2019-08-08T13:10:00 0 4.23 5.204 …
【问题讨论】:
-
我很高兴分享这个问题的潜在解决方案,但您确定这就是您要寻找的结果吗?源数据似乎表明 ALDBROUGH、AVONMOUTH、BACTON 等将是行,而时间和流量将是列。
-
非常感谢。这个问题远远超出了我的基本知识。任何一种组合都有效。这种格式的唯一原因是数据每 12 分钟更新一次,它可能更容易存储和分析,但如果你能帮助我获得流量作为列,我将不胜感激!
标签: python xml dataframe beautifulsoup xmltodict