我叫巴勃罗,这是我在这个小组里的第一个问题。 在查看了其他相关帖子后,我决定提出一个请求, 我想知道是否有办法执行以下操作
假设我有以下数据帧结构:
+----+---------+------------+------------+----------+
| | MRBTS | dest | gw | length |
|----+---------+------------+------------+----------|
| 0 | 13004 | 10.104.0.0 | 10.48.0.0 | 16 |
| 1 | 13004 | 10.107.0.0 | 10.45.0.0 | 16 |
| 2 | 13005 | 10.104.0.0 | 10.130.0.0 | 8 |
| 3 | 13005 | 10.102.0.0 | 10.130.0.0 | 8 |
| 4 | 13005 | 0.0.0.0 | 10.110.0.0 | 16 |
+----+---------+------------+------------+----------+
测试DF:
我想通过MRBT导出到XML列表groupping,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE raml SYSTEM 'raml20.dtd'>
<raml version="2.0" xmlns="raml20.xsd">
<cmData type="plan" scope="all" name="iprt" id="PlanConfiguration( 7152069 )">
<header>
<log dateTime="2020-06-19T07:38:16.000-03:00" action="created" appInfo="PlanExporter">InternalValues are used</log>
</header>
<managedObject distName="MRBTS-13004">
<list >
<item>
<p name="dest">10.104.0.0</p>
<p name="length">16</p>
<p name="gw">10.38.0.0</p>
</item>
<item>
<p name="dest">10.107.0.0</p>
<p name="length">16</p>
<p name="gw">10.45.0.0</p>
</item>
</list>
</managedObject>
<managedObject distName="MRBTS-13005">
<list >
<item>
<p name="dest">10.104.0.0</p>
<p name="length">8</p>
<p name="gw">10.130.8.0</p>
</item>
<item>
<p name="dest">10.102.0.0</p>
<p name="length">8</p>
<p name="gw">10.130.8.0</p>
</item>
<item>
<p name="dest">0.0.0.0</p>
<p name="length">16</p>
<p name="gw">10.110.0.0</p>
</item>
</list>
</managedObject>
</cmData>
</raml>
我从另一篇文章(How do convert a pandas/dataframe to XML?)中获得了这段代码,但在尝试按MRBT分组时,我被绊倒了:
import pandas as pd
df = pd.DataFrame({'MRBTS':['13004','13004','13005','13005','13005'],
'dest':['10.104.0.0','10.107.0.0','10.104.0.0','10.102.0.0','0.0.0.0'],
'gw':['10.48.0.0','10.45.0.0','10.130.0.0','10.130.0.0','10.110.0.0'],
'length':['16','16','8','8','16']})
def func(row):
xml = ['<list >']
for field in row.index:
xml.append(' <field name="{0}">{1}</field>'.format(field, row[field]))
xml.append('</list>')
return '\n'.join(xml)
print ('\n'.join(df.apply(func, axis=1)))
这个结果是:
<list >
<field name="MRBTS">13004</field>
<field name="dest">10.104.0.0</field>
<field name="gw">10.48.0.0</field>
<field name="length">16</field>
</list>
<list >
<field name="MRBTS">13004</field>
<field name="dest">10.107.0.0</field>
<field name="gw">10.45.0.0</field>
<field name="length">16</field>
</list>
<list >
<field name="MRBTS">13005</field>
<field name="dest">10.104.0.0</field>
<field name="gw">10.130.0.0</field>
<field name="length">8</field>
</list>
<list >
<field name="MRBTS">13005</field>
<field name="dest">10.102.0.0</field>
<field name="gw">10.130.0.0</field>
<field name="length">8</field>
</list>
<list >
<field name="MRBTS">13005</field>
<field name="dest">0.0.0.0</field>
<field name="gw">10.110.0.0</field>
<field name="length">16</field>
</list>
你能帮我解决这个问题吗
因为XML文档不是文本文档,所以避免使用字符串连接构建XML。相反,考虑使用DOM方法使用第三方^ {CD1> }建立树,甚至内置模块,^ {CD2}}(稍加修改)。对于数据,按
MRBTS
字段遍历数据帧的子集:输出XML
我认为关键在于首先为目标xml表示更好地构建数据
agg()
的Kwargjson2xml
发送dict之前,我已经从pandas.to_dict()
对dict进行了一些实验输出(仅第一条记录)
相关问题 更多 >
编程相关推荐