【发布时间】:2015-11-30 23:39:26
【问题描述】:
我有一个看起来像这样的 pandas 系列:一堆unicode 字符串
>>> some_id
0 400742773466599424
1 400740479161352192
2 398829879107809281
3 398823962966097921
4 398799036070653952
Name: some_id, dtype: object
我可以执行以下操作,但我失去了精度。
>>> some_id.convert_objects(convert_numeric=True)
0 4.007428e+17
1 4.007405e+17
2 3.988299e+17
3 3.988240e+17
4 3.987990e+17
Name: some_id, dtype: float64
但如果我执行some_id.astype(int),我会得到以下信息:ValueError: invalid literal for long() with base 10
如何在保持精度的同时将它们转换为 int 或 int64 类型?
我正在使用熊猫0.16.2
更新:我发现了错误。 some_id.astype(int) 或任何其他形式的它应该可以工作。在我拥有的数千行中,some_id 有一个 text 的 string(不是 stringed 数字),因此它正在停止 int64 转换。
谢谢
【问题讨论】:
-
如果你使用
some_id.astype(np.int64)会发生什么? -
您使用的是什么版本的 Pandas。鉴于您上面的示例数据,将 some_id 从对象转换为 int(Pandas 0.14.1)没有任何问题。此外,您不会丢失精度转换为数字,它只是不显示。
-
@Alexander 可能是时候升级了 - 当前版本是 0.16.2 :)
-
@Alexander:实际上,如果转换为浮点数,精度会丢失。考虑
int(float("100000000000000001")),它返回100000000000000000。 -
@Alexander:你确实失去了精度,因为浮点数在这里表示的数字太多。拿OP的系列看
ser.astype(np.int64) - ser.astype(float).astype(np.int64)。
标签: python numpy pandas type-conversion