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

Pandas:保存再加载后user_pseudo_id值变更问题及解决方法

问题描述

我有一个DataFrame,其中包含user_pseudo_id列,数据如下:

user_pseudo_id
2041513012.1676969234
2041513191.1677359234
2041513765.1677359510

该列数据类型为字符串。但使用以下代码保存并重新加载后:

df.to_csv(path_to_data, index=False)
df = pd.read_csv(path_to_data)

该列的值发生了变化,变为:

user_pseudo_id
2041513012.1676967
2041513191.1677360
2041513765.1677360
问题原因

核心问题是pandas读取CSV时的自动类型推断:

  • CSV文件本身不携带数据类型信息,pd.read_csv()会自动识别列的类型。你的user_pseudo_id列内容格式类似浮点数,被推断成了float64类型。
  • float64的精度有限,最多只能精确表示15-17位有效数字,而你的原始字符串小数部分有10位,加上整数部分的10位,总有效数字超出了float64的精确范围,导致存储时出现精度丢失,加载后的值自然发生变化。
解决方法

有两种可靠的解决方式:

1. 读取CSV时强制指定列类型为字符串

在pd.read_csv()中通过dtype参数指定user_pseudo_id列的类型为字符串,避免自动推断:

df = pd.read_csv(path_to_data, dtype={"user_pseudo_id": str})

2. 使用带类型信息的格式保存数据

如果需要长期保留数据类型信息,建议用Parquet、Feather这类支持类型存储的格式替代CSV:

# 保存为Parquet
df.to_parquet(path_to_data, index=False)
# 加载
df = pd.read_parquet(path_to_data)

这种方式不需要额外指定类型,能完整保留原始的字符串数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:18:11