从Dataframes到面板的值设置数据存在实际问题,将用一些代码解释
import numpy as np
from pandas import *
foo = DataFrame(np.nan,index=date_range('2014-05-01','2014-05-8'),columns=['a','b'])
bar= Panel({'foob':foo.copy(),'barb':foo.copy()})
foo[:]=1.0
好的,所以下面的这两个按预期工作......
bar.ix['foob',0,0] = foo.ix[0,0].copy()
bar.ix['foob',:,:]
bar.ix['foob',:,0] = foo.ix[:,0].copy()
bar.ix['foob',:,:]
但是当我尝试设置整个'foob'项目(Dataframe)时,它会将值重置为nan的
bar.ix['foob',:,:] = foo.ix[:,:].copy()
bar.ix['foob',:,:]
a b
2014-05-01 NaN NaN
2014-05-02 NaN NaN
2014-05-03 NaN NaN
2014-05-04 NaN NaN
2014-05-05 NaN NaN
2014-05-06 NaN NaN
2014-05-07 NaN NaN
2014-05-08 NaN NaN
问题是......我正在尝试使用另一个数据对象的索引值在Panel上设置值,但是我得到一个ValueError:数组不可广播以修正形状,这与形状看起来很奇怪一样吗?
bar.ix['foob',foo.index[1:],foo.columns[1:]] = foo.ix[foo.index[1:],foo.columns[1:]].copy()
通过创建一个新的数据框对象(在这种情况下为foobar),对其进行索引值设置,就像一个魅力,然后替换整个项目,有一个解决方法,但它不理想(特别是对于大型结构)小组
foobar = bar.ix['foob',:,:].copy()
foobar.ix[foo.index[1:],foo.columns[1:]] = foo.ix[foo.index[1:],foo.columns[1:]]
bar['foob'] = footer
bar['foob']
a b
2014-05-01 NaN NaN
2014-05-02 NaN 1
2014-05-03 NaN 1
2014-05-04 NaN 1
2014-05-05 NaN 1
2014-05-06 NaN 1
2014-05-07 NaN 1
2014-05-08 NaN 1
有人知道如何使用上面另一个数据对象的索引设置Panel的值,而不必创建新的Dataframe,非常感谢
答案 0 :(得分:2)
对于您的具体示例,这将起作用
In [12]: bar['foob'] = foo.ix[:,:].copy()
# bar.ix['foob'] also works
In [13]: bar.values
Out[13]:
array([[[ nan, nan],
[ nan, nan],
[ nan, nan],
[ nan, nan],
[ nan, nan],
[ nan, nan],
[ nan, nan],
[ nan, nan]],
[[ 1., 1.],
[ 1., 1.],
[ 1., 1.],
[ 1., 1.],
[ 1., 1.],
[ 1., 1.],
[ 1., 1.],
[ 1., 1.]]])
当你指定多个轴索引器(:
)时,这个发送理论上应该对它们进行相同处理,可能是潜伏的错误。