如果提供的参数不提供布尔列,我遇到了一个奇怪的问题(或有意的?)在哪里combine_first或update正在导致存储的值bool向上转换为s 。float64
ipython 中的示例工作流:
In [144]: test = pd.DataFrame([[1,2,False,True],[4,5,True,False]], columns=['a','b','isBool', 'isBool2'])
In [145]: test
Out[145]:
a b isBool isBool2
0 1 2 False True
1 4 5 True False
In [147]: b = pd.DataFrame([[45,45]], index=[0], columns=['a','b'])
In [148]: b
Out[148]:
a b
0 45 45
In [149]: test.update(b)
In [150]: test
Out[150]:
a b isBool isBool2
0 45 45 0 1
1 4 5 1 0
这是否意味着update函数的行为?我认为,如果没有指定任何内容,则update不会与其他列混淆。
编辑:我开始多修修补补。情节变厚了。如果我再插入一个命令:test.update([])在运行之前test.update(b),布尔行为会以数字向上转换为objects. 这也适用于 DSM 的简化示例。
根据panda 的源代码,看起来 reindex_like 方法正在创建一个 dtype 的 DataFrame object,而 reindex_likeb创建一个 dtype 的 DataFrame float64。由于object更通用,后续操作使用布尔值。不幸的是np.log,在数值列上运行将失败,并显示AttributeError.