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

Pandas处理混合类型列转字符串追加.0的精确值获取方法

pandas读取混合类型CSV列转字符串出现多余.0后缀问题解决

问题场景

处理CSV文件时,文件中Parent列混合包含三类值:YYYYMMDD格式日期、整数、浮点数,需要将该列所有值以varchar类型存入数据表。但使用pandas DataFrame做类型转换时,即使将该列强制转换为str类型,原整数值末尾仍会被自动追加.0后缀,无法获取原始精确值。

测试数据

测试文件test.csv内容:

NodeParent
192.3
2020220616
1312
1539.19

问题复现代码

import pandas as pd

z=pd.read_csv('test.csv')
z['Parent']=z['Parent'].astype(str)
print(z)

运行上述代码后,Parent列实际输出值为2.3、20220616.0、12.0、39.19,预期输出为原始值2.3、20220616、12、39.19,无多余.0后缀。

问题原因

pandas读取CSV时会自动推断列类型,当同一列中同时存在整数和浮点数时,整列会被推断为float64类型,原整数值会被存储为带.0的浮点数格式,此时直接转字符串就会保留.0后缀。

解决方法

方法1:读取阶段指定列类型(推荐)

读取CSV时直接指定Parent列为字符串类型,跳过pandas的自动类型推断,从源头保留原始文本值:

import pandas as pd

z = pd.read_csv('test.csv', dtype={'Parent': str})
print(z)

方法2:读取后逐值清洗转换

如果已经完成文件读取,可对列值逐轮判断,对整数型浮点数做格式化处理,去掉多余后缀:

import pandas as pd

z = pd.read_csv('test.csv')
z['Parent'] = z['Parent'].apply(
    lambda x: str(int(x)) if isinstance(x, float) and x.is_integer() else str(x)
)
print(z)

两种方法运行后均可得到符合预期的Parent列值,可直接写入数据库varchar类型字段。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:42:13