【发布时间】:2022-09-24 23:09:44
【问题描述】:
不良行为: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
有时我需要更新某些文件的某些列,而使所有其他单元格保持不变。
此外,更新可以包含我需要添加为新行的新文件(可能有一些 N/As)。
更新以另一个 DataFrame upd 的形式出现:
pags rating
name
file4 new0 11
file5 new1 12
file6 new2 13
file7 new3 14
在这里,我想为文件 4,5 更改 pags 和 rating 并为文件 6,7 添加新行。
我发现我可以用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]
-
具有 NaN 的列不能是整数列,因为 NaN 是浮点数。