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

如何避免pandas.combine将整数转换为浮点数

问题:pandas.combine导致整数列转为浮点数,如何保留原始数据类型?

非预期行为

  • pandas.combine 将整数转换为浮点数。

场景描述

我的DataFrame包含文件名列表(作为索引)及各文件的元数据:

pags  rating  tms  glk
name                              
file1  original0       1    1    1
file2  original1       2    2    2
file3  original2       3    3    3
file4  original3       4    4    4
file5  original4       5    5    5

有时我需要更新部分文件的部分列,其余单元格保持不变。此外,更新数据可能包含需要添加为新行的新文件(可能含缺失值)。更新数据来自另一个DataFrame upd:

pags  rating
name               
file4  new0      11
file5  new1      12
file6  new2      13
file7  new3      14

我希望修改file4、file5的pags和rating列,并添加file6、file7的新行,因此使用pd.combine实现:

df = df.combine(upd, lambda old,new: new.fillna(old), overwrite=False)[df.columns]

执行后得到如下结果,但所有整数列都变成了浮点数:

pags  rating  tms  glk
name                              
file1  original0     1.0  1.0  1.0
file2  original1     2.0  2.0  2.0
file3  original2     3.0  3.0  3.0
file4       new0    11.0  4.0  4.0
file5       new1    12.0  5.0  5.0
file6       new2    13.0  NaN  NaN
file7       new3    14.0  NaN  NaN

我希望保留原始数据类型(dtypes),且不想手动对每一列使用.astype()进行转换。

示例创建代码

df = pd.DataFrame({
    'name': ['file1','file2','file3','file4','file5'],
    'pags': ["original"+str(i) for i in range(5)],
    'rating': [1, 2, 3, 4, 5],
    'tms': [1, 2, 3, 4, 5],
    'glk': [1, 2, 3, 4, 5],
}).set_index('name')

upd = pd.DataFrame({
    'name': ['file4','file5','file6','file7'],
    'pags': ["new"+str(i) for i in range(4)],
    'rating': [11, 12, 13, 14],
}).set_index('name')

df = df.combine(upd, lambda old,new: new.fillna(old), overwrite=False)[df.columns]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:10:25