我遇到了一个奇怪的问题(或者说是有意的?)其中,combine_first
或update
导致存储为bool
的值被上推到float64
s中,如果提供的参数没有提供布尔列。在
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的方法创建了一个dtype object
的数据帧,而类似reindex的方法b
创建了一个dtype float64
的数据帧。由于object
更为通用,因此后续的操作将使用bool。不幸的是,在数值列上运行np.log
将失败,并返回AttributeError
。在
这是一个错误,更新不应触及未指定的列,已在此处修复https://github.com/pydata/pandas/pull/3021
在更新之前,日期框
b
由{a1}填充,因此b变成然后使用numpy.where更新数据帧。在
不幸的是,对于
^{pr2}$numpy.where
,如果两个数据具有不同的类型,则会使用更通用的类型。例如由于
numpy
中的NaN
是浮动类型,它也将返回一个浮动类型。在因此,在更新之后,“isBool”和“isBool2”列将变为浮动类型。在
我在the issue tracker for pandas上添加了此问题
相关问题 更多 >
编程相关推荐