如果提供的参数不提供布尔列,我遇到了一个奇怪的问题(或有意的?)在哪里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
.