Я пытаюсь создать матрицу / 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.
заранее спасибо






Вы можете сделать следующее.
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
...
С 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
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)
Помимо того, что
np.arange(50)неэффективен из-за цикла, он не производит такой же вывод, какnp.linspace(0, 50).