使用 loc 方法获取 DataFrame 的视图

2023-12-22

我正在尝试使用以下方法获取 pandas 数据框的视图loc方法,但当我修改原始 DataFrame 时它没有按预期工作。
我想使用提取 DataFrame 的行/切片loc方法,以便当对 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 and 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(链式 [])更受青睐”

引用2: “除了简单的情况之外,很难预测是否”getitem" (由链式选项使用)将返回一个视图或副本(这取决于数组的内存布局,pandas 对此不做任何保证),因此是否 "setitem“(由 .loc 使用)将修改 dfmi 或随后立即被抛出的临时对象。”

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 loc 方法获取 DataFrame 的视图 的相关文章

  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • 如何计算 pandas 数据帧上的连续有序值

    我试图从给定的数据帧中获取连续 0 值的最大计数 其中包含来自 pandas 数据帧的 id date value 列 如下所示 id date value 354 2019 03 01 0 354 2019 03 02 0 354 201
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class

随机推荐