如何从python生成的动态循环中删除空值?

问题描述 投票:7回答:1

我有一个如下所示的数据框

   ORDER_NO         2401        2504         2600
    2020020         2019-12-04  2019-12-10   2019-12-12 
    2020024         2019-12-25  NaN          2019-12-20
    2020034         NaN         NaN          2019-12-20
    2020020         2019-12-12  2019-12-15   2019-12-18

我从上述datframe创建XML。我想删除被弹出到XML中的空值。从XML删除特定的列和行值

我的代码

header = """<ORD>{}</ORD>"""
body ="""
<osi:ORDSTSINF types:STSCDE="{}">
<DTM>{}</DTM>"""

cols = df.columns
for row in df.itertuples():
    with open(f'{row[1]}.xml', 'w') as f:
        f.write(header.format(row[1]))
        for c, r in zip(row[2:], cols[1:]):
            f.write(body.format(r, c))

记录2的当前输出

<ORD>2020024</ORD>
<osi:ORDSTSINF types:STSCDE="2401">
<DTM>2019-12-25</DTM>
<osi:ORDSTSINF types:STSCDE="2504">
<DTM>NaN</DTM>
<osi:ORDSTSINF types:STSCDE="2600">
<DTM>2019-12-20</DTM>

记录2的预期输出

 <ORD>2020024</ORD>
    <osi:ORDSTSINF types:STSCDE="2401">
    <DTM>2019-12-25</DTM>
    <osi:ORDSTSINF types:STSCDE="2600">
    <DTM>2019-12-20</DTM>

如何在python中完成?

python-3.x pandas loops dataframe itertools
1个回答
1
投票
stack

自然删除空值

header = """<ORD>{}</ORD>""" body =""" <osi:ORDSTSINF types:STSCDE="{}"> <DTM>{}</DTM>""" for o, d in df.set_index('ORDER_NO').stack().groupby('ORDER_NO'): with open(f'{o}.xml', 'w') as f: f.write(header.format(o)) for (o, s), d in d.iteritems(): f.write(body.format(s, d))


详细信息

df.set_index('ORDER_NO').stack() ORDER_NO 2020020 2401 2019-12-04 2504 2019-12-10 2600 2019-12-12 2020024 2401 2019-12-25 2600 2019-12-20 2020034 2600 2019-12-20 2020020 2401 2019-12-12 2504 2019-12-15 2600 2019-12-18

© www.soinside.com 2019 - 2024. All rights reserved.