我需要用从数据帧中提取的一些值来更新一个面板切片。即使我没有得到任何错误,它也不能工作。出什么问题了?
df = pd.DataFrame(np.random.rand(10, 4),
columns=['sd', 'ed', 'sbc', 'ssd'],
index=np.arange(2000, 2010))
siPanel = pd.Panel(np.nan, items=np.arange(1998, 2014), major_axis=range(0, 10), minor_axis=range(0, 5))
spiPanel.loc[:, [0], [0]] = df.loc[:, ['sbc']]请注意,维度并不相同,我想使用索引来对齐数据。我知道转换为具有相同形状的数组可以得到我想要的结果,但我想找到另一种解决方案。
谢谢你的帮助。
L.
发布于 2016-07-19 23:37:22
你会遇到一些半复杂的维度问题。
让我们稍微分解一下你的任务行。
siPanel.loc[:, [0], [0]] = df.loc[:, ['sbc']]df.loc[:, ['sbc']]是一个具有10 x 1形状的数据帧。:给了它10,['sbc']给了它1。如果你做了df.loc[:, 'sbc'],形状将是10 x 0或(10, ),这将是一系列。我想说,一个好的规则是根据需要使用尽可能少的维度。
siPanel.loc[:, [0], [0]]是shape 16 x 1 x 1的一个面板。利用上一段中的经验,您知道我们可以通过使用siPanel.loc[:, 0, 0]将维度减少到(16, )。现在这也是一个系列,任务可以不出问题。
试试这个:
siPanel.loc[:, 0, 0] = df.loc[:, 'sbc']
siPanel.loc[:, 0, 0]
1998 NaN
1999 NaN
2000 0.677186
2001 0.030134
2002 0.003945
2003 0.894504
2004 0.913937
2005 0.553544
2006 0.199962
2007 0.384449
2008 0.491008
2009 0.408632
2010 NaN
2011 NaN
2012 NaN
2013 NaN
Name: 0, dtype: float64https://stackoverflow.com/questions/38462642
复制相似问题