Consider the following three DataFrame
's:
df1 = pd.DataFrame([[1,2],[4,3]])
df2 = pd.DataFrame([[1,.2],[4,3]])
df3 = pd.DataFrame([[1,'a'],[4,3]])
Here are the types of the second column of the DataFrame
's:
In [56]: map(type,df1[1])
Out[56]: [numpy.int64, numpy.int64]
In [57]: map(type,df2[1])
Out[57]: [numpy.float64, numpy.float64]
In [58]: map(type,df3[1])
Out[58]: [str, int]
In the first case, all int
's are casted to numpy.int64
. Fine. In the third case, there is basically no casting. However, in the second case, the integer (3
) is casted to numpy.float64
; probably since the other number is a float.
How can I control the casting? In the second case, I want to have either [float64, int64]
or [float, int]
as types.
Workaround:
Using a callable printing function there can be a workaround as showed here.
def printFloat(x):
if np.modf(x)[0] == 0:
return str(int(x))
else:
return str(x)
pd.options.display.float_format = printFloat