【问题标题】:Printing an XML file from DataFrame python with condition使用条件从 DataFrame python 打印 XML 文件
【发布时间】:2021-09-23 17:47:28
【问题描述】:

我有一个这样的熊猫df

ID  EpisodeID  Origin   Destination
1      1         A          B
1      2         B          A
2      1         C          D
2      2         D          E
2      3         E          C
3      1         A          D
3      2         D          A

我想制作一个以df 为源的txt 文件。因此,我使用这样的代码:

with open("output.txt","w+") as f:
    for index, row in df.iterrows():
        f.write("  <person id =\"%s\">\n" % (row['ID']))
        f.write("     <activity  O=\"%s"\   D=\"%s"\>\n % (row[Origin], row[Destination]))
        f.write("     </activity>\n")
        f.write("  </person>\n")

输出显示如下:

<person id="1">
   <activity O="A"  D="B">
   </activity>
</person>
<person id="1">
   <activity O="B"  D="A">
   </activity>
</person>

然而,我想做的不是这样。如何迭代或编写代码,以便输出类似于:

<person id="1">
   <activity O="A"  D="B">
   </activity>
   <activity O="B"  D="A">
   </activity>
</person>
<person id="2">
   <activity O="C"  D="D">
   </activity>
   <activity O="D"  D="E">
   </activity>
   <activity O="E"  D="C"
   </activity>
</person>

所以,我要为每个 ID 制作什么,而不是为所有索引制作(如果这有意义的话)。

请帮忙:)

【问题讨论】:

标签: python pandas xml write


【解决方案1】:

编写一个嵌套循环,首先按ID 列分组,然后为每个组编写person 标签,在每个组内,循环并编写activity

with open("output.txt","w+") as f:
    for _id, g in df.groupby('ID'):
        f.write(f'  <person id ="{_id}">\n')
        for t in g.itertuples():  # use itertuples since it's faster than iterrows
            f.write(f'     <activity  O="{t.Origin}" D="{t.Destination}">\n')
            f.write("     </activity>\n")
        f.write("  </person>\n")

输出:

with open("output.txt", "r") as f:
    print(''.join(f.readlines()))

  <person id ="1">
     <activity  O="A" D="B">
     </activity>
     <activity  O="B" D="A">
     </activity>
  </person>
  <person id ="2">
     <activity  O="C" D="D">
     </activity>
     <activity  O="D" D="E">
     </activity>
     <activity  O="E" D="C">
     </activity>
  </person>
  <person id ="3">
     <activity  O="A" D="D">
     </activity>
     <activity  O="D" D="A">
     </activity>
  </person>

【讨论】:

    猜你喜欢
    • 2021-10-09
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多