I have a dataframe like this:
This dataframe has several columns. Two are of type float
: price
and change
, while volme
and amount
are of type int
.
I use the method df.values.tolist()
change df to list and get the data:
datatmp = df.values.tolist()
print(datatmp[0])
[20160108150023.0, 11.12, -0.01, 4268.0, 4746460.0, 2.0]
The int
types in df
all change to float
types.
My question is why do int
types change to the float
types? How can I get the int
data I want?
I think the pandas documentation helps:
So here apparently float is chosen to accomodate all component types. A simple method would be (however, most possibly there are more elegant solutions around, I'm not too familiar with pandas):
Here the
itertuples()
gives an iterator with elements of the form (rownumber, colum1_entry, colum2_entry, ...). The map takes each such tuple and applies the lambda function, which removes the first component (rownumber), and returns a list containing the components of a single row. You can also remove thelist()
invocation if it's ok for you to work with a list of tuples.[Dataframe values property][1] "http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.values.html#pandas.DataFrame.values"
You can convert column-by-column:
This will preserve the data type of each column.
Than convert to the structure you want:
You can do it in one line:
You can check what datatypes your columns have with:
Very likely your column
amount
is of typefloat
. Do you have anyNaN
in this column? These are always of typefloat
and would make the whole columnfloat
.You can cast to
int
with: