我在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的索引。有没有一种有效的方法呢?
你创建的dataframe
看起来像这样:
当你要求:x, y = dfplot['xarr'], dfplot['yarr']
时,你要求xarr
和yarr
列的内容都包含列表。因此,对于他们每个人,你得到一个series列表。
你自己看:
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)