pandas:链接的作业

发布于 2021-01-29 19:31:08

我一直在阅读这个链接的“返回视图与副本”。我真的不明白的是如何 链接分配
在熊猫的概念工作和如何的使用.ix().iloc()或者.loc()影响它。

我收到SettingWithCopyWarning以下代码行的警告,其中dataPanda数据框amount是该数据框中的列(系列)名称:

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:"
关注者
0
被浏览
51
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    的目的SettingWithCopy是警告用户您 可能 正在做的事情不会像预期的那样更新原始数据帧。

    这里data是一个数据帧,可能是单个dtype(或不是单个dtype)。然后,您将参考data['amount']作为系列的参考,并对其进行更新。这可能在您的情况下有效,因为您返回的是相同的dtype数据。

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

    熊猫几乎在所有方法调用中都返回对象的副本。该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
    

    仅供参考。inplace操作既没有更快也没有更高的内存效率。my2c他们应该被禁止。但是对于该API来说为时已晚。

    您当然可以关闭此功能:

    pd.set_option('chained_assignment',None)
    

    Pandas可以在整个测试套件中运行,并将其设置为raiseFYI(这样我们就知道是否正在发生链接)。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看