【发布时间】:2020-09-05 12:08:37
【问题描述】:
我正在尝试使用 loc 方法获取 pandas 数据帧的视图,但是当我修改原始数据帧时它没有按预期工作。
我想使用 loc 方法提取 DataFrame 的一行/切片,以便在对 DataFrame 进行修改时,切片反映更改。
让我们看看这个例子:
import pandas as pd
import numpy as np
df = pd.DataFrame({'ID':np.arange(0,5,2), 'a':np.arange(3), 'b':np.arange(3)}).set_index('ID')
df
a b
ID
0 0 0
2 1 1
4 2 2
现在我使用 loc 创建一个切片:
slice1 = df.loc[[2],]
slice1
a b
ID
2 1 1
然后我修改原来的DataFrame:
df.loc[2, 'b'] = 9
df
a b
ID
0 0 0
2 1 9
4 2 2
但不幸的是,我们的切片并没有像我期望的那样反映这种修改:
slice1
a b
ID
2 1 1
我的期望:
a b
ID
2 1 9
我发现了一个使用iloc 和loc 的组合的丑陋修复,但我希望有更好的方法来获得我期望的结果。
感谢您的帮助。
【问题讨论】:
-
你的意思是当你改变'df'时,slice1应该自动反映改变?我不认为这是可能的。
-
是的,这在this doc中提到了
-
我同意安舒尔的观点。我相信它的设计目的是反过来。您取一个切片,更改切片中的值,然后更新原始 df。
-
我想知道,因为我可以用 iloc 进行这种修改:
slice2 = df.iloc[1:2,:]然后它反映了 df 更新时的变化。 -
其实我现在很困惑。我尝试了我在“答案”部分分享的内容。无论如何都不是答案,但希望澄清我的疑问。