Ben*_*uet 5 python dataframe pandas
我正在尝试使用该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但我希望有一种更好的方法来获得我期望的结果。
感谢您的帮助。
免责声明:这不是答案。
\n\n我尝试测试如何覆盖链式赋值与 .loc 中的值,参考上面 @Quang Hoang 共享的 pandas 文档链接。
\n\n这是我尝试过的:
\n\ndfmi = pd.DataFrame([list(\'abcd\'),\n   list(\'efgh\'),\n   list(\'ijkl\'),\n   list(\'mnop\')],\n   columns=pd.MultiIndex.from_product([[\'one\', \'two\'],\n   [\'first\', \'second\']]))\n\ndf1 = dfmi[\'one\'][\'second\']\ndf2 = dfmi.loc[:, (\'one\', \'second\')]\ndf1 和 df2 的输出:
\n\n0    b\n1    f\n2    j\n3    n\n迭代 1:
\n\nvalue = [\'z\', \'x\', \'c\', \'v\']\ndfmi[\'one\'][\'second\'] = value\n输出 df1:
\n\n0    z\n1    x\n2    c\n3    v\n迭代 2:
\n\nvalue = [\'z\', \'x\', \'c\', \'v\']\ndfmi.loc[:, (\'one\', \'second\')] = value\n输出 df2:
\n\n0    z\n1    x\n2    c\n3    v\n新集合的分配正在改变这两种情况下的值。
\n\n文档说:
\n\n引用 1:“方法 2 (.loc) 比方法 1(链式 [])更受欢迎”
\n\n引用 2:\n\'除了简单的情况外,\xe2\x80\x99s 很难预测“ getitem ”(由链式选项使用)是否会返回视图或副本(这取决于数组的内存布局,对此 pandas 不做任何保证),因此“ setitem ”(由 .loc 使用)是否会修改 dfmi 或随后立即抛出的临时对象。\'
\n\n我无法理解上面的解释。如果 dfmi 中的值可以更改(在我的情况下)并且可能不会更改(如 Benoit\ 的情况),那么通过哪种方式获得结果?不确定我是否在这里遗漏了一点。\n寻求帮助
\n