当前位置: 首页 > 知识库问答 >
问题:

熊猫:链接作业[重复]

谭学名
2023-03-14

我一直在阅读“返回视图与副本”的链接。我真的不明白Pandas中的链式赋值概念是如何工作的,以及. ix(). iloc(). loc()的用法是如何影响它的。

我获得以下代码行的设置和copywarning警告,其中数据是熊猫数据框,金额是该数据框中的列(系列)名称:

data['amount'] = data['amount'].astype(float)

data["amount"].fillna(data.groupby("num")["amount"].transform("mean"), inplace=True)

data["amount"].fillna(mean_avg, inplace=True)

看看这段代码,很明显我在做一些次优的事情吗?如果是这样,你能告诉我替换代码行吗?

我知道以下警告,并认为我的警告是误报:

链接分配警告/例外旨在通知用户可能无效的分配。可能存在误报;意外报告链式作业的情况。

编辑:导致第一次复制警告错误的代码。

data['amount'] = data.apply(lambda row: function1(row,date,qty), axis=1) 
data['amount'] = data['amount'].astype(float)

def function1(row,date,qty):
    try:
        if(row['currency'] == 'A'):
            result = row[qty]
        else:
            rate = lookup[lookup['Date']==row[date]][row['currency'] ]
            result = float(rate) * float(row[qty])
        return result
    except ValueError: # generic exception clause
        print "The current row causes an exception:"

共有1个答案

石博艺
2023-03-14

设置with copy的目的是警告用户,您所做的操作可能不会像预期的那样更新原始数据帧。

这里,data是一个数据帧,可能是单一数据类型(也可能不是)。然后,您将引用此系列的数据['amount'],并对其进行更新。这可能适用于您的情况,因为您返回的数据类型与现有数据类型相同。

但是,它可以创建一个副本,更新您看不到的数据['amount']副本;然后你会想为什么它没有更新。

Pandas在几乎所有的方法调用中都返回一个对象的副本。inplace操作是一种可以工作的便利操作,但一般不清楚数据是否正在被修改,并且可能在副本上工作。

更清楚地做到这一点:

data['amount'] = data["amount"].fillna(data.groupby("num")["amount"].transform("mean"))

data["amount"] = data['amount'].fillna(mean_avg)

对拷贝工作的另一个好处。你可以链操作,这是不可能与inplace的。

例如

data['amount'] = data['amount'].fillna(mean_avg)*2

仅供参考<代码>就地操作既不更快,也不更节省内存。my2c他们应该被禁止。但是在那个API上太晚了。

当然,您可以关闭此选项:

pd.set_option('chained_assignment',None)

Pandas在整个测试套件中运行,设置为raise(以便我们知道是否发生了链接),仅供参考。

 类似资料:
  • 问题内容: 我最终在写出这个问题的时候就弄清楚了,所以无论如何我都会发布并回答我自己的问题,以防别人需要一点帮助。 问题 假设我们有一个,包含该数据。 目标 对于每一行,将 其一个月*以内的每一行的总和相加,最好使用一种非常干净的语法。 * 我尝试过的 但这引发了异常 版: 问题答案: 使用偏移量而不是专门使用30天或大约一个月。 最初,我凭直觉跳了起来,使用了一个月,但现在很清楚为什么不起作用。

  • 我想得到这样的东西 我用groupby关键字搜索了stackoverflow,没有找到与我类似的问题。

  • 问题内容: 我一直在阅读这个链接的“返回视图与副本”。我真的不明白的是如何 链接分配 在熊猫的概念工作和如何的使用,或者影响它。 我收到以下代码行的警告,其中Panda数据框是该数据框中的列(系列)名称: 看这段代码,很明显我做的不是次优的吗?如果是这样,您能告诉我替换代码行吗? 我知道以下警告,并希望认为我的警告是误报: 链接的作业警告/异常旨在通知用户可能无效的作业。可能存在误报;意外报告链接

  • 问题内容: 我有一个熊猫系列,目前看起来像这样: 我想从根本上将其重塑成一个看起来像这样的数据框… 即。逻辑构造,指出每个观察(行)属于哪个类别。 我能够编写基于循环的代码来解决该问题,但是鉴于我需要处理的行数众多,这将非常缓慢。 有谁知道针对这种问题的矢量化解决方案?我将不胜感激。 编辑:有509个类别,我确实有一个清单。 问题答案:

  • 我有两个非常大的系列,只包含连接键。在不使用索引的情况下(在本例中没有意义),我希望以最有效的方式通过值将一个系列左键连接到另一个系列。 现在,我添加了一列1,这样我就可以使用和一个左连接,这样我就可以确定中的每个键是否也存在于Right中。 我确信我可以在不创建两个未使用的列的情况下完成这项工作,但是似乎希望为联接使用索引。有没有办法让两个系列的值保持不变?有没有更快的numpy版本? 例如:

  • 我已经看到了将一个列/系列分解成熊猫数据框架的多个列这一主题的一些变体,但是我一直在尝试做一些事情,但是现有的方法并没有真正成功。 给定如下数据帧: 我想将系列中的项目转换为列,以 值作为值,如下所示: 我觉得这应该是一个相对简单的问题,但我已经为此努力了几个小时,不断增加的复杂程度,但没有成功。