查询数据框时是否可以强制熊猫返回视图?

时间:2020-03-21 16:31:04

标签: python pandas

给出此数据框

df = pd.DataFrame({'x': range(10,51,10),
                   'y': [False]*5})
print(df)
--------
    x      y
0  10  False
1  20  False
2  30  False
3  40  False
4  50  False

有没有一种方法可以查询x上的数据框,并强制熊猫返回我可以在将来某个时候修改的视图?

view = df.loc[df.x <= 20]
print(view._is_view) # returns False
# ... life goes by for a while
view.y = True # does not modify original df

我知道我可以做到

df.loc[df.x <=20, 'y'] = True

但是在我的情况下,查询和分配需要按时间和代码空间分开。我当前的解决方法是从查询中获取索引,然后只修改原始数据框,而不用弄乱视图。

注意为了简化起见,我省略了此操作,但在我的实际应用中,我需要将视图的每一行一一分配,并按时间分隔。如果我能使它正常工作,该视图将是光滑的。

1 个答案:

答案 0 :(得分:1)

熊猫文件目前在这方面提供的指导很少。我找不到可以保证返回视图的情况的文档列表,例如如您的示例所示,无法保证.loc返回视图。

据我了解,使用.loc时更有可能返回视图的两个条件是:

在您的特定情况下,这意味着将df.loc[df.x <= 20]更改为df.loc[0:1,'y'],如下所示:

df = pd.DataFrame({'x': range(10,51,10),
                   'y': [False]*5})
view = df.loc[0:1,'y']
print(view._is_view)  # returns True
view[:] = True
print(df)

结果为:

    x      y
 0  10   True
 1  20   True
 2  30  False
 3  40  False
 4  50  False

这是否适用于您的用例取决于x中的选择是否是连续的,就像在您的简化示例中一样。