Как создать фреймворк из массивов numpy?

Я пытаюсь создать матрицу / DataFrame с числами, хранящимися в 2 переменных

x = np.linspace(0,50)
y = np.exp(x)

и я бы хотел, чтобы они выглядели так:

x    |     y
___________________
0    |     1.0...
1    |     2.77...             
2    |     7.6...                      
...  |     ...             
50   |     5.18e+21...    

Я бы хотел, чтобы он был в DataFrame, чтобы я мог работать с ним с библиотекой pandas.

заранее спасибо

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
0
2 689
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Вы можете сделать следующее.

import pandas as pd
import numpy as np

df = pd.DataFrame()
df['x'] = np.linspace(0,50)
df['y'] = np.exp(df['x'])

Просто составьте список кортежей и передайте его конструктору DataFrame:

df = pd.DataFrame([(i, np.exp(i)) for i in np.linspace(0,50)], columns=['x', 'y'])

Вывод

x        y
0  1.000000e+00
1  2.718282e+00
2  7.389056e+00
...

Помимо того, что np.arange(50) неэффективен из-за цикла, он не производит такой же вывод, как np.linspace(0, 50).

jdehesa 17.12.2018 18:24
Ответ принят как подходящий

С pandas:

Вы можете оформить

>>> xs = np.arange(51)                                                                                                 
>>> ys = np.exp(xs) 

чтобы получить значения x и y, а затем построить фрейм данных с

>>> df = pd.DataFrame({'x': xs, 'y': ys})
>>> df                                                                                                                 
     x             y
0    0  1.000000e+00
1    1  2.718282e+00
2    2  7.389056e+00
3    3  2.008554e+01
...

В этом случае вы также можете использовать значения x в качестве индекса серии без потери какой-либо информации.

>>> index = pd.RangeIndex(0, 51, name='x')                                                                             
>>> exps = pd.Series(data=np.exp(index), index=index, name='y')                                                        
>>> exps                                                                                                               
x
0     1.000000e+00
1     2.718282e+00
2     7.389056e+00
3     2.008554e+01
...
Name: y, dtype: float64

Без pandas:

Подумайте, действительно ли вам нужен фреймворк или серия данных. Вы можете просто оставить это в

>>> xs = np.arange(51)                                                                                                 
>>> ys = np.exp(xs)

а затем проиндексируйте ys с целыми числами 0, 1, 2, ..., чтобы получить значения exp(0), exp(1), exp(2), ...

import pandas as pd

df = pd.DataFrame({'x':x, 'y':y})

Измените ключ в словаре на желаемое имя столбца.

Присвойте имена столбцам и установите столбцы между тем:

import pandas as pd
df = pd.DataFrame({"x" : x , "y" : y})

Просто:

Код:

import pandas as pd
import numpy as np

x = np.linspace(0,50)
y = np.exp(x)

df = pd.DataFrame({'x': x, 'y': y})

То, что вы ищете, это [np.concatenate][1].

Итак, для вашего примера код будет

import numpy as np
x = np.linspace(0,50)
y = np.exp(x)
z = np.concatenate((x.reshape(1,-1),y.reshape(1,-1))).T
print(z.shape)
# (2,50)

Другие вопросы по теме