gpt4 book ai didi

python - 使用 loc 方法获取 DataFrame 的 View

转载 作者:行者123 更新时间:2023-12-03 17:25:19 26 4
gpt4 key购买 nike

我正在尝试使用 loc 获取 Pandas 数据框的 View 方法,但当我修改原始 DataFrame 时它没有按预期工作。
我想使用 loc 提取 DataFrame 的一行/切片方法,以便在对 DataFrame 进行修改时,切片会反射(reflect)更改。

让我们看看这个例子:

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

但不幸的是,我们的切片并没有像我期待的那样反射(reflect)这种修改:

slice1
a b
ID
2 1 1

我的期望:

    a   b
ID
2 1 9

我发现了一个使用 iloc 混合的丑陋修复和 loc但我希望有更好的方法来获得我期望的结果。
感谢您的帮助。

最佳答案

免责声明:这不是答案。

我尝试测试如何覆盖链式赋值与 .loc 中的值,引用上面@Quang Hoang 共享的 Pandas 文档链接。

这是我尝试过的:

dfmi = pd.DataFrame([list('abcd'),
list('efgh'),
list('ijkl'),
list('mnop')],
columns=pd.MultiIndex.from_product([['one', 'two'],
['first', 'second']]))

df1 = dfmi['one']['second']
df2 = dfmi.loc[:, ('one', 'second')]

df1 和 df2 的输出:
0    b
1 f
2 j
3 n

迭代 1:
value = ['z', 'x', 'c', 'v']
dfmi['one']['second'] = value

输出df1:
0    z
1 x
2 c
3 v

迭代 2:
value = ['z', 'x', 'c', 'v']
dfmi.loc[:, ('one', 'second')] = value

输出df2:
0    z
1 x
2 c
3 v

新集合的分配正在改变这两种情况下的值。

文档说:

引用 1: '方法 2 (.loc) 比方法 1 (chained [])' 更受欢迎

引用 2:
'除了简单的情况,很难预测“ getitem ”(由链接选项使用)是否会返回一个 View 或一个副本(这取决于数组的内存布局,关于哪个pandas没有保证),因此“ setitem ”(由 .loc 使用)是否会修改 dfmi 或之后立即被抛出的临时对象。

我无法理解上面的解释。如果 dfmi 中的值可以改变(在我的情况下)并且可能不会改变(如在 Benoit 的情况下)那么哪种方式获得结果?不确定我是否在这里遗漏了一点。
寻求帮助

关于python - 使用 loc 方法获取 DataFrame 的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61890845/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com