我一直在试图用Pandas&过滤我的Python数据NumPy的。 ' where'之间似乎存在差异。 Pandas(pd)与Numpy(np)中的条款。 np和pd数据帧都有'其中'条款。 np'其中'有道理,但pd' where' (对我而言)。
#[In]#
np.random.seed(1000) ; rv = DataFrame(np.random.randn(1000,2))
rv[:10]
#[Out]#
# 0 1
# 0 -0.804458 0.320932
# 1 -0.025483 0.644324
# 2 -0.300797 0.389475
# 3 -0.107437 -0.479983
# 4 0.595036 -0.464668
但是,当尝试根据pd的值来分配rv2时,其中'我得到的条款:
rv2 = rv.where(rv>=0,1,-1)
type(rv2)
# NoneType
rv[:10]
# 0 1
# 0 1.000000 0.320932
# 1 1.000000 0.644324
# 2 1.000000 0.389475
# 3 1.000000 1.000000
# 4 0.595036 1.000000
所以rv2是NoneType,rv实际上已经改变了值。我甚至不清楚rv如何最终得到它的新值,因为它们不符合where子句,据我所知。
但是,如果我使用np where子句而不是数据帧'其中'事情按预期工作(除了我得到一个np数组而不是数据帧):
#[In]#
np.random.seed(1000) ; rv = DataFrame(np.random.randn(1000,2))
xy = np.where(rv>=0,1,-1)
xy[:5]
#[Out]#
# array([[-1, 1],
# [-1, 1],
# [-1, 1],
# [-1, -1],
# [ 1, -1],
文档http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.where.html#pandas.DataFrame.where指出' where'应该返回一个对象,而不是进行就地更改。但是,rv变量已就地更改。
有谁能告诉我两者之间有什么区别以及我应该如何使用pd数据框'其中'?