Pandas中DataFrame转XML时价格数值被放大10倍问题求助
Pandas转XML时Price字段被放大10倍的排查与解决方法
排查步骤
- 先确认DataFrame中
preço列的实际值:执行print(df['preço'].iloc[0])查看,若输出已经是3361176,说明问题出在数据读取或转换环节,而非XML生成阶段。 - 检查原始输入数据格式:如果数据源是CSV/Excel,确认价格字段的小数点是用
.还是,分隔——部分地区会用,作为小数点,若读取时未指定对应参数,会被误解析为整数。 - 核查XML生成代码:检查是否存在意外的乘法操作(比如
row['preço'] * 10),导致数值被放大。 - 确认数据类型:查看
df['preço'].dtype,若为整数类型,说明转换时丢失了小数信息,需调整转换逻辑。
解决建议
- 修正数值转换逻辑
如果原始数据用逗号作为小数点分隔符,转换时必须指定decimal参数:
df['preço'] = pd.to_numeric(df['Preço'], errors='coerce', decimal=',')
- 修复数据读取环节
若问题出在读取文件时,读取CSV/Excel时明确指定小数点分隔符:
# CSV示例 df = pd.read_csv('products.csv', decimal=',', usecols=['Preço', 'ProductName']) # Excel示例(需openpyxl支持) df = pd.read_excel('products.xlsx', decimal=',')
- 调整XML生成代码
确保生成XML时直接使用原始数值,无额外运算:
import xml.etree.ElementTree as ET root = ET.Element('root') for _, row in df.iterrows(): row_node = ET.SubElement(root, 'row') price_node = ET.SubElement(row_node, 'Price') # 直接转换为字符串,或格式化保留指定小数位 price_node.text = f"{row['preço']:.1f}"
- 校验数值准确性
转换后可通过以下代码批量检查数值范围,避免异常值:
# 筛选价格异常放大的行 print(df[df['preço'] > df['preço'].mean() * 5])
内容的提问来源于stack exchange,提问作者WesleyAlmont
相关产品推荐
相关产品推荐

