python - 熊猫条件选择 - 返回视图而不是副本
问题描述
我有一个原始的熊猫数据框,其中有一串对象在上面进行条件选择。每次我进行条件选择时,pandas 都会创建一个新的数据框。换句话说:
import pandas as pd
df = pd.DataFrame(dict(A=range(3,23), B=range(5,25)))
print(id(df))
df2 = df[df['A']> 15]
print(id(df2))
df = pd.DataFrame(dict(A=range(3,43), B=range(5,45)))
print(id(df))
# output:
139963862409288
139963862409456
139963862275296
在上面的示例中,我想df2
在更新df
. 我现在知道了,因为我将变量 df 重新绑定到一个新的 Pandas DataFrame(一个新对象),它的 ID 发生了变化并且df2
不再连接到新df
的。反正有没有按照我想要的方式做?pandas 中是否有任何方法/属性来保持原始数据框和我的条件选择之间的连接,或者我不知道的任何 Pythonic 方式?
解决方案
你想达到什么目的?也许它可以以不同的方式完成?
关于拥有视图而不是副本——当您选择一行或一列时,您就有了一个视图。下面的代码演示了这一点:
import pandas as pd
df = pd.DataFrame(dict(A=range(8,13), B=range(10,15), C=range(-3,2)))
print(df)
print('-----------')
dfa = df['A']
df2 = df.loc[2]
dfi = df.iloc[2]
dfa[2]=42
df2['B']=99
dfi['C']=-1
print(df)
print(dfa)
print(df2)
print(dfi)
推荐阅读
- php - composer dump-autoload -o 跳过我所有的课程
- javascript - 构造 URL 字符串时如何使用变量?
- python - 在 Python 上对 8 个超参数执行网格搜索
- kotlin - 具有暂停功能的控制器导致 netty.RoutingInBoundHandler - java.lang.NoClassDefFoundError: kotlinx/coroutines/ThreadContextElement
- javascript - 不确定如何解决待处理的承诺?
- c++ - 虚拟对象指针的方法和向量模板
- sql - 如何在 Postgres 的时间范围内获得平均值?
- unix - 如果存在重复的 id 列,则从管道分隔文件中删除带有特定标志的行
- java - java - 在Java jsp中输入键事件时如何隐藏警报div
- r - 将列表传递给函数参数?