我遇到一个奇怪的问题(或故意的吗?),其中combine_first
或update
是造成存储为bool
被upcasted值到float64
■如果提供的参数不提供布尔列。大熊猫数据框中combine_first和更新方法有奇怪的行为
工作流程示例中的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(b)
之前再插入一个命令:test.update([])
,则布尔行为的工作原理是以objects
的数字为代价。这也适用于DSM的简化示例。
基于panda's source code,它看起来像reindex_like方法是创建D型object
的数据帧,而reindex_like b
创建D型float64
的数据帧。由于object
更一般,随后的操作与布尔工作。不幸的是,在数字列上运行np.log
将失败,并显示AttributeError
。
简单的例子:'DF = pd.DataFrame([真,假] ); df.update({})'。 – DSM 2013-03-12 02:58:05