Как создать набор данных panda / pickle с np-массивами записей в столбцах, чтобы я мог их эффективно построить? - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть список словарей в python со значениями как float, так и np-массивов.Я хочу сохранить его в кадре данных pandas, чтобы я мог построить xarr, yarr для заданного набора параметров.

dic1 = {'p1':1, 'p2': 34, 'xarr' : np.array([1,2,3]) , 'yarr': np.array([4,4,6])}
dic2 = {'p1':2, 'p2': 45 ,'xarr' : np.array([1,2,3]) , 'yarr': np.array([6,6,4])}
listdic = [dic1, dic2]
df = pd.DataFrame(listdic)
dfplot= df[df['p1'] > 1]
x, y = dfplot['xarr'], dfplot['yarr']
plt.plot(x, y)

Но я получаю эту ошибку

ValueError: setting an array element with a sequence.

Поскольку яЯ также получаю индекс панд DF.Есть ли эффективный способ сделать это?

1 Ответ

0 голосов
/ 12 сентября 2018

Полученный результат dataframe, который вы создали, выглядит следующим образом:

enter image description here

Когда вы спрашиваете: x, y = dfplot['xarr'], dfplot['yarr'], вы запрашиваетесодержимое столбцов xarr & yarr, которые оба содержат списки.Таким образом, для каждого из них вы получаете серию списков.

Убедитесь сами:
type(x) Результат:

pandas.core.series.Series

Вы можете получить доступ к содержимому серии, используя iloc :

idx = 0
x = x_series.iloc[idx]

В вашем примере у вас есть только 1 запись, поэтому вы можете просто использовать:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
dic1 = {'p1':1, 'p2': 34, 'xarr' : np.array([1,2,3]) , 'yarr': np.array([4,4,6])}
dic2 = {'p1':2, 'p2': 45 ,'xarr' : np.array([1,2,3]) , 'yarr': np.array([6,6,4])}
listdic = [dic1, dic2]
df = pd.DataFrame(listdic)
dfplot= df[df['p1'] > 1]
x_series, y_series = dfplot['xarr'], dfplot['yarr']
x,y = x_series.iloc[0], y_series.iloc[0]
plt.plot(x, y)
...