Как создать фрейм данных из массива numy? - PullRequest
0 голосов
/ 17 декабря 2018

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

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

Ответы [ 7 ]

0 голосов
/ 17 декабря 2018

Просто:

Код:

import pandas as pd
import numpy as np

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

df = pd.DataFrame({'x': x, 'y': y})
0 голосов
/ 17 декабря 2018

То, что вы ищете, это [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)
0 голосов
/ 17 декабря 2018

Назначьте имена столбцов и установите столбцы в среднем времени:

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

enter image description here

0 голосов
/ 17 декабря 2018
import pandas as pd

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

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

0 голосов
/ 17 декабря 2018

С 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), ...

0 голосов
/ 17 декабря 2018

Просто составьте список кортежей и передайте его конструктору 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
...
0 голосов
/ 17 декабря 2018

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

import pandas as pd
import numpy as np

df = pd.DataFrame()
df['x'] = np.linspace(0,50)
df['y'] = np.exp(df['x'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...