我在向Pandas数据帧的切片分配类似对象的系列时遇到问题。 也许我没有按照预期的方式使用Datafarme,因此非常感谢一些启发。 我已经阅读了以下文章:
http://jsfiddle.net/7zpggvLe/1/
pandas: slice a MultiIndex by range of secondary index
据我所知,我用一个.loc调用唤起切片的方式确保我没有得到数据的副本。显然原始数据帧也会被改变,但是我得到NaN值而不是预期的数据。 请参阅附加的代码snipet。
我是否必须为我想要更改的每个值迭代数据帧的所需部分并使用.set_value(row_idx,col_idx,val)方法?
亲切的问候和提前谢谢
马库斯
In [1]: import pandas as pd
In [2]: mindex = pd.MultiIndex.from_product([['one','two'],['first','second']])
In [3]: dfmi = pd.DataFrame([list('abcd'),list('efgh'),list('ijkl'),list('mnop')],
...: index = mindex, columns=(['X','Y','Z','Q']))
In [4]: print(dfmi)
X Y Z Q
one first a b c d
second e f g h
two first i j k l
second m n o p
In [5]: dfmi.loc[('two',slice('first','second')),'X']
Out[5]:
two first i
second m
Name: X, dtype: object
In [6]: substitute = pd.Series(data=["ab","cd"], index= mindex.levels[1])
...: print(substitute)
first ab
second cd
dtype: object
In [7]: dfmi.loc[('two',slice('first','second')),'X'] = substitute
In [8]: print(dfmi)
X Y Z Q
one first a b c d
second e f g h
two first NaN j k l
second NaN n o p
答案 0 :(得分:1)
正在发生的事情是substitute
有一个索引,用于确定值的位置,而dfmi.loc[('two',slice('first','second')),'X']
也指定了这样的位置。
在分配过程中,pandas试图对齐两个索引,因为它们不匹配(如果substitute
也是多索引,它们会一样),对齐的结果都是NA,它会被插入。
解决办法可能是删除substitute
的索引,因为loc
已经指定了要插入值的位置:
dfmi.loc[('two',slice('first','second')),'X'] = substitute.values
甚至更简单,直接插入值:
dfmi.loc[('two',slice('first','second')),'X'] = ["ab","cd"]
答案 1 :(得分:0)
你可以试试这个:
dfmi.loc [' 2'] [' X'] =替代