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

如何阻止Pandas在复制操作中自动更改对象类型?

解决Pandas赋值/复制时整数转浮点的问题

核心原因

Pandas原生整数类型(如int64)无法容纳NaN值,只要列中存在NaN或赋值操作引入NaN,就会自动将列类型转为浮点型(float64)——这是问题的根源。

简便解决方案

1. 使用可空整数类型(Int64,注意大写I)

Pandas 0.24版本及以上支持可空整数类型,它既能存储整数,也能兼容NaN,不会自动转浮点:

  • 创建数据框时直接指定类型:
import pandas as pd
df = pd.DataFrame({'id': [1617, 1618, None], 'value': [100, 200, 300]}, dtype='Int64')
  • 转换现有列:
df['id'] = df['id'].astype('Int64')

2. 批量转换所有列的类型

如果有大量列需要处理,用convert_dtypes()方法一键批量转换:

df = df.convert_dtypes()

这个方法会自动将适合的列转为可空类型(包括可空整数、可空字符串等),无需手动逐个处理。

3. 赋值操作时保持类型一致性

执行df[x] = df[y]这类操作前,确保源列df[y]是可空整数类型,或者直接在赋值时指定类型:

df['new_col'] = df['original_col'].astype('Int64')

4. 处理仅含NaN的列

全NaN的列默认是浮点型,直接转成可空整数即可:

df['empty_col'] = df['empty_col'].astype('Int64')

解决JSON序列化的.0问题

用可空整数类型后,json.dumps序列化时,整数会保留原格式,NaN会转为null,不会出现1617.0这类带小数的字符串:

import json
json_str = json.dumps(df.to_dict('records'))
# 输出示例:'[{"id":1617,"value":100,"new_col":1617},{"id":1618,"value":200,"new_col":1618},{"id":null,"value":300,"new_col":null}]'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 05:52:51