Panda Dataframe для NumPy массива с помощью pandas.dataframe.values - PullRequest
0 голосов
/ 10 марта 2019

У меня есть фрейм данных, как показано ниже.Я хочу сделать это массивом.Когда я использую команду df.values, она становится массивом, но все атрибуты конвертируются в float.Я проверил документацию df.values, но это не помогло, могу ли я присвоить numpy тот же тип данных df?

Заранее спасибо за помощь

                   High          Low  ...      Volume    Adj Close
Date                                  ...                         
2018-12-20  2509.629883  2441.179932  ...  5585780000  2467.419922
2018-12-21  2504.409912  2408.550049  ...  7609010000  2416.620117
2018-12-24  2410.340088  2351.100098  ...  2613930000  2351.100098
2018-12-26  2467.760010  2346.580078  ...  4233990000  2467.699951
2018-12-27  2489.100098  2397.939941  ...  4096610000  2488.830078
2018-12-28  2520.270020  2472.889893  ...  3702620000  2485.739990
2018-12-31  2509.239990  2482.820068  ...  3442870000  2506.850098
2019-01-02  2519.489990  2467.469971  ...  3733160000  2510.030029

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

Вы можете сделать это с помощью NumPy структурированных массивов .Я создам DataFrame только с 2 строками и 2 столбцами, похожими на ваши, чтобы продемонстрировать, как вы можете сделать это с любым размером DataFrame.

import Pandas as pd
import Numpy as np

df = pd.DataFrame({'High': [2509.629883, 2504.409912], 
                   'Volume': [5585780000, 7609010000]}, 
                  index=np.array(['2018-12-20', '2018-12-21'], dtype='datetime64'))

Затем вы создадите пустой массив NumPy, определяющий, какой тип данных должен содержать каждый столбец.иметь.В моем примере у меня только 2 строки, поэтому массив будет иметь только 2 строки следующим образом:

array = np.empty(2, dtype={'names':('col1', 'col2', 'col3'),
                          'formats':('datetime64[D]', 'f8', 'i8')})

array['col1'] = df.index
array['col2'] = df['High']
array['col3'] = df['Volume']

, и массив будет выглядеть так:

array([('2018-12-20', 2509.629883, 5585780000),
       ('2018-12-21', 2504.409912, 7609010000)],
      dtype=[('col1', '<M8[D]'), ('col2', '<f8'), ('col3', '<i8')])

Вы также можете создатьnp.recarray класс с помощью команды np.rec.array.Это почти идентично со структурированными массивами с одной дополнительной функцией.Вы можете получить доступ к полям как к атрибутам, то есть array.col1 вместо array['col1'].Тем не менее, массивные массивы записей, по-видимому, медленнее, чем структурированные массивы!

0 голосов
/ 10 марта 2019

Массивы Numpy имеют единый тип данных, как видно из документации:

numpy.ndarray class numpy.ndarray (shape, dtype = float, буфер = None,

смещение = 0, шаги = нет, порядок = нет) [источник] Объект массива представляет многомерный однородный массив элементов фиксированного размера. связанный объект типа данных описывает формат каждого элемента в массив (его порядок байтов, сколько байтов он занимает в памяти, будь то целое число, число с плавающей запятой или что-то еще, и др.)

Когда вы используете df.values, все значения будут преобразованы в наиболее подходящий тип данных, чтобы сохранить однородность.

pandas.DataFrame.values ​​ также упоминает, что:

Примечания

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

например. Если dtypes - это float16 и float32, dtype будет выгружен в float32. Если dtypes - int32 и uint8, dtype будет преобразован в int32. По соглашению numpy.find_common_type (), смешивание int64 и uint64 будет результат в float64 dtype.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...