2015-07-30 17 views
6

Bir pandas sütununun işlevini kullanmam gerekir, ancak apply kullanarak işlevi çağırdığımda, dtypeobject olarak değiştirilmiştir. Burada neler olduğunu bilen var mı? Sütun doğrudan geçirildiği takdirde bu sorun olmaz oVeri tipi pandalar sütunu, bir işleve uygulandığında nesneye dönüşür mü?

import pandas as pd 

df = pd.DataFrame({'stringcol':['a'], 'floatcol': [1.5]}) 
df.dtypes 
Out[1]: 
floatcol  float64 
stringcol  object 
dtype: object 

df.apply(lambda col: col.dtype) 
Out[2]: 
floatcol  object 
stringcol object 
dtype: object 

Not:

f = lambda col: col.dtype 
f(test.floatcol) 
Out[3]: dtype('float64') 

cevap

6

dolayı DataFrame._apply_standard bir optimizasyon olarak görünmektedir. Bu yöntemin kodundaki "hızlı yol", DataFrame karışık türde olduğundan, dtype değeri df.values dtype olan bir çıktı serisi oluşturur; bu durumda, DataFrame karışık türde olduğundan object. Eğer apply çağrısına reduce=False geçmesi, sonuç doğrudur:

>>> df.apply(lambda col: col.dtype, reduce=False) 
floatcol  float64 
stringcol  object 
dtype: object 

(Ben bana belli değil söylemeliyim nasıl belgelerle reduce jibes bu davranışı.)

+0

güzel bir i Aslında "DataFrame.to_sql" ile benzer bir hatayı hatırlıyorum gibi görünüyor. Ben bu 'optimizasyon' kullandığım hemen hemen her veri karması karışık veri türleri vardır beri varsayılan davranış olarak sorun varsa merak ediyorum .... – maxymoo

İlgili konular