将 XML 中没有标签的 API 响应转换为 Pandas 数据框
Converting API response in XML without tags to Pandas Dataframe
我是 XML 解析的新手,我需要帮助将 XML API 响应转换为 pandas 数据帧。
这是 XML 响应:
<?xml version="1.0" encoding="UTF-8"?>
<response success="true">
<output><![CDATA[Account Name,Account Code,Level Name,"Item","Customer",Wk1Y23,Wk2Y23
"SVF - Customer Shipping Default","SVF_Shipping_Default.SVF_CSD","Los Fresnos","1.5 G PANSY Matrix Pltr Clear Mix ~ LW85201","Lowes # 90 ~ LW00090",0.0,2.0
"SVF - Customer Shipping Default","SVF_Shipping_Default.SVF_CSD","Los Fresnos","1.5 G PANSY Matrix Pltr Clear Mix ~ LW85201","Lowes # 63 ~ LW00063",0.0,2.0
"SVF - Customer Shipping Default","SVF_Shipping_Default.SVF_CSD","Los Fresnos","1.5 G PANSY Matrix Pltr Clear Mix ~ LW85201","Lowes # 271 ~ LW00271",0.0,4.0]]></output>
</response>
如您所见,此 XML 中没有很多标记。我尝试使用 xml.etree.ElementTree 将 xml 解析为数据帧,但我没有向数据帧获取任何数据:
etree = ET.parse(xml_data)
df = pd.DataFrame(list(iter_docs(etree.getroot())))
print(df)
最好的方法是什么?
考虑解析 <output>
节点的文本并使用 StringIO
:
将内容传递到 read_csv
调用
from io import StringIO
import xml.etree.ElementTree as ET
import pandas as pd
...
output_text = ET.parse(xml_data).find("output").text
with StringIO(output_text) as csv_data:
df = pd.read_csv(csv_data)
print(df)
Account Name Account Code Level Name \
0 SVF - Customer Shipping Default SVF_Shipping_Default.SVF_CSD Los Fresnos
1 SVF - Customer Shipping Default SVF_Shipping_Default.SVF_CSD Los Fresnos
2 SVF - Customer Shipping Default SVF_Shipping_Default.SVF_CSD Los Fresnos
Item Customer Wk1Y23 \
0 1.5 G PANSY Matrix Pltr Clear Mix ~ LW85201 Lowes # 90 ~ LW00090 0.0
1 1.5 G PANSY Matrix Pltr Clear Mix ~ LW85201 Lowes # 63 ~ LW00063 0.0
2 1.5 G PANSY Matrix Pltr Clear Mix ~ LW85201 Lowes # 271 ~ LW00271 0.0
Wk2Y23
0 2.0
1 2.0
2 4.0
我是 XML 解析的新手,我需要帮助将 XML API 响应转换为 pandas 数据帧。
这是 XML 响应:
<?xml version="1.0" encoding="UTF-8"?>
<response success="true">
<output><![CDATA[Account Name,Account Code,Level Name,"Item","Customer",Wk1Y23,Wk2Y23
"SVF - Customer Shipping Default","SVF_Shipping_Default.SVF_CSD","Los Fresnos","1.5 G PANSY Matrix Pltr Clear Mix ~ LW85201","Lowes # 90 ~ LW00090",0.0,2.0
"SVF - Customer Shipping Default","SVF_Shipping_Default.SVF_CSD","Los Fresnos","1.5 G PANSY Matrix Pltr Clear Mix ~ LW85201","Lowes # 63 ~ LW00063",0.0,2.0
"SVF - Customer Shipping Default","SVF_Shipping_Default.SVF_CSD","Los Fresnos","1.5 G PANSY Matrix Pltr Clear Mix ~ LW85201","Lowes # 271 ~ LW00271",0.0,4.0]]></output>
</response>
如您所见,此 XML 中没有很多标记。我尝试使用 xml.etree.ElementTree 将 xml 解析为数据帧,但我没有向数据帧获取任何数据:
etree = ET.parse(xml_data)
df = pd.DataFrame(list(iter_docs(etree.getroot())))
print(df)
最好的方法是什么?
考虑解析 <output>
节点的文本并使用 StringIO
:
read_csv
调用
from io import StringIO
import xml.etree.ElementTree as ET
import pandas as pd
...
output_text = ET.parse(xml_data).find("output").text
with StringIO(output_text) as csv_data:
df = pd.read_csv(csv_data)
print(df)
Account Name Account Code Level Name \
0 SVF - Customer Shipping Default SVF_Shipping_Default.SVF_CSD Los Fresnos
1 SVF - Customer Shipping Default SVF_Shipping_Default.SVF_CSD Los Fresnos
2 SVF - Customer Shipping Default SVF_Shipping_Default.SVF_CSD Los Fresnos
Item Customer Wk1Y23 \
0 1.5 G PANSY Matrix Pltr Clear Mix ~ LW85201 Lowes # 90 ~ LW00090 0.0
1 1.5 G PANSY Matrix Pltr Clear Mix ~ LW85201 Lowes # 63 ~ LW00063 0.0
2 1.5 G PANSY Matrix Pltr Clear Mix ~ LW85201 Lowes # 271 ~ LW00271 0.0
Wk2Y23
0 2.0
1 2.0
2 4.0