如何从 Python 生成的动态循环中删除空值?
Posted
技术标签:
【中文标题】如何从 Python 生成的动态循环中删除空值?【英文标题】:How to drop null values from dynamic loop generated from Python? 【发布时间】:2020-06-05 01:07:41 【问题描述】:我有一个这样的数据框:
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
我正在从上述数据框创建 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 中做到这一点?
【问题讨论】:
【参考方案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), date in d.iteritems():
f.write(body.format(s, date))
详情
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
顺便说一句
if
可以解决您的问题
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:]):
if pd.notna(c):
f.write(body.format(r, c))
【讨论】:
我刚刚添加了一个页脚 (footer = """<END>123</END>""
) 但输出在同一行 <DTM>2020-03-29</DTM><END>123</END>
而不是新行。
当您使用f.write
时,它不会假定为您放置'\n'
。你从你的body
字符串中得到了这些。使用footer = """\n<END>123</END>"""
指定您的页脚以上是关于如何从 Python 生成的动态循环中删除空值?的主要内容,如果未能解决你的问题,请参考以下文章
使用POWERQUERY 怎么总是删不掉这个空值?求帮助使用POWERQUERY 怎么总是删不掉这个空值?求帮助
100天精通Python(数据分析篇)——第68天:Pandas数据清洗函数大全(判断缺失删除空值填补空值替换元素分割元素)