python-3.x - 如何从 Python 生成的动态循环中删除空值?
问题描述
我有一个这样的数据框:
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 中做到这一点?
解决方案
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))
推荐阅读
- amazon - 亚马逊支付错误client_Id未定义
- python - python 3中的全局变量声明
- mvc.jquery.datatables - 使用服务器端分页处理在 jquery.datatables 中不显示记录
- python - 如何在 Python 的循环中将加载的表分配给不同的变量?
- outlook - 存储按钮无法从文件安装
- javascript - 在 Chrome 扩展中访问 DOM
- tfsbuild - 有什么方法可以杀死(停止)从代码构建的 TFS 2017 团队?
- javascript - Javascript - 延迟承诺解决
- php - 用 WooCommerce 4+ 中选择的变化价格替换可变价格范围
- angular - 量角器基本错误消息 E2E