You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas写入XML文件时将数值转换为整数去除小数位的方法

CSV转XML时SubID属性带.0后缀问题修复

问题原因

pandas读取CSV自动推断类型时,会把无小数的ID类列识别为float64浮点型,直接调用str()转换浮点值就会生成带.0后缀的字符串,不符合整数ID的格式要求。

修复方法

在给XML属性赋值前,先将ID类字段转为整数类型再转字符串即可;也可以在读取CSV时直接指定ID列的类型为整数,从源头规避类型问题。

修改后可直接运行的核心代码

import xml.etree.ElementTree as ET
import pandas as pd

root = ET.Element('AA_ITEMS')
# 推荐读取CSV时就指定整数列类型,从根源避免浮点数问题,替换为你实际的CSV读取逻辑
# df = pd.read_csv('你的csv文件路径', dtype={'Id': int, 'SubID': int, 'Rank': int})

for o_id, df_group in df.groupby('Id'):
    # 修正原代码列名大小写不匹配问题,同时转int兜底避免Id出现.0后缀
    id_node = ET.Element('Id', {'ID': str(int(o_id))})
    for _, row in df_group.iterrows():
        # 核心修复:SubID先转int再转字符串,去除.0后缀
        sub_id_node = ET.Element('SubId', {'ID': str(int(row['SubID']))})
        rank_node = ET.Element('Rank')
        # Rank为整数,同样做int转换兜底
        rank_node.text = str(int(row['Rank']))
        size_node = ET.Element('Size')
        size_node.text = str(row['Size'])
        sub_id_node.append(rank_node)
        sub_id_node.append(size_node)
        id_node.append(sub_id_node)
    root.append(id_node)

# 生成完整合法XML,自动补全闭合标签
min_xml = ET.tostring(root, encoding='utf8')
with open('/tmp/{}'.format(self.blob_name.split('.')[0]+'.xml'), "wb") as file:
    file.write(min_xml)

修复后效果

生成的SubId节点属性将和CSV原始格式一致,示例:

<SubId ID="123">
  <Rank>1</Rank>
  <Size>0.1</Size>
</SubId>

注:你贴出的当前输出XML存在标签未闭合、Id=2分组下SubID顺序颠倒的问题,是示例内容截断/分组逻辑未排序导致的,如果需要固定顺序可以在groupby前对DataFrame按Id、Rank字段排序即可。

内容的提问来源于stack exchange,提问作者TalendDeveloper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 12:03:25