我遇到一個奇怪的問題(或故意的嗎?),其中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