如何避免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
相关产品推荐
相关产品推荐

