2016-01-17 12 views
1

У меня есть dataframe так:dataframe values.tolist() тип данных

enter image description here

Это dataframe имеет несколько колонок. Два имеют тип float: price и change, тогда как volme и amount имеют тип int. Я использую метод df.values.tolist() изменения ФР в список и получить данные:

datatmp = df.values.tolist() 
print(datatmp[0]) 

[20160108150023.0, 11.12, -0.01, 4268.0, 4746460.0, 2.0] 

В int типы в df все изменения в float типов. Мой вопрос: почему типы int меняются на типы float? Как я могу получить данные int, которые я хочу?

+0

Это панды? Пожалуйста, укажите [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) –

ответ

0

Вы можете преобразовать столбец за столбцом:

by_column = [df[x].values.tolist() for x in df.columns] 

Это сохранит тип данных каждого столбца.

Чем преобразовать в структуру, которую вы хотите:

list(list(x) for x in zip(*by_column)) 

Вы можете сделать это в одной строке:

list(list(x) for x in zip(*(df[x].values.tolist() for x in df.columns))) 

Вы можете проверить, какие типы данных в столбцах есть с:

df.info() 

Очень вероятно, что ваша колонка amount имеет тип float. У вас есть NaN в этой колонке? Они всегда имеют тип float и будут делать всю колонку float.

Вы можете бросить в int с:

df.values.astype(int).tolist() 
+0

Я хочу получить данные массива списка с помощью float и int два типа, а не и, например, [20160108150023, 11.12, -0.01, 4268, 4746460, 2] –

0

Я думаю, что документация панды помогает:

DataFrame.values ​​

Numpy представление NDFrame

DTYPE будет dtype с более низким общим знаменателем (неявное повышение); то есть, если типы dtypes (даже числовые типы) смешиваются, выбирается тот, который вмещает все. Используйте это с осторожностью, если вы не имеете дело с блоками.

Таким образом, здесь очевидно, что float выбран для размещения всех типов компонентов. Простой метод будет (однако, наиболее вероятно есть более элегантные решения вокруг, я не слишком хорошо знаком с пандами):

datatmp = map(lambda row: list(row[1:]), df.itertuples()) 

Здесь itertuples() дает итератор с элементами вида (RowNumber, colum1_entry, colum2_entry, ...). Карта берет каждый такой кортеж и применяет лямбда-функцию, которая удаляет первый компонент (rownumber) и возвращает список, содержащий компоненты одной строки.Вы также можете удалить вызов list(), если вам удобно работать со списком кортежей.

[Dataframe ценности собственности] [1] "http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.values.html#pandas.DataFrame.values"

+0

как использовать get_value() вместо этого, я хочу получить данные массива списка с float и int двумя типами –

+0

Возможно, подход, который я добавил, подходит для ваших нужд? – Pachelbel

+0

как использовать подход может получить результат, который я хочу –

 Смежные вопросы

  • Нет связанных вопросов^_^