I have the following dataframe:
import pandas as pd
import numpy as np
df = pd.DataFrame(dict(A = np.arange(3), 
                         B = np.random.randn(3), 
                         C = ['foo','bar','bah'], 
                         D = pd.Timestamp('20130101')))
print(df)
   A         B    C          D
0  0 -1.087180  foo 2013-01-01
1  1 -1.343424  bar 2013-01-01
2  2 -0.193371  bah 2013-01-01
dtypes for columns:
print(df.dtypes)
A             int32
B           float64
C            object
D    datetime64[ns]
dtype: object
But after using apply they all changes to object:
print(df.apply(lambda x: x.dtype))
A    object
B    object
C    object
D    object
dtype: object
Why are dtypes coerced to object? I thought that in apply only columns should be taken in account. 
pandas 0.17.1python 3.4.3
You can use parameter reduce=False and more info here:
print (df.apply(lambda x: x.dtype, reduce=False))
A             int32
B           float64
C            object
D    datetime64[ns]
dtype: object
In newer versions of pandas is possible use:
print (df.apply(lambda x: x.dtype, result_type='expand'))
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With