我一直在阅读这个链接的“返回视图与副本”。我真的不明白的是如何 链接分配
在熊猫的概念工作和如何的使用.ix()
,.iloc()
或者.loc()
影响它。
我收到SettingWithCopyWarning
以下代码行的警告,其中data
Panda数据框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:"
的目的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可以在整个测试套件中运行,并将其设置为raise
FYI(这样我们就知道是否正在发生链接)。
主要内容:concat(),append()Pandas 通过 concat() 函数能够轻松地将 Series 与 DataFrame 对象组合在一起,函数的语法格式如下: pd.concat(objs,axis=0,join='outer',join_axes=None,ignore_index=False) 参数说明如下所示: 参数名称 说明 objs 一个序列或者是Series、DataFrame对象。 axis 表示在哪个轴方向
问题内容: 我有一个带有两列的pandas数据框:x和value。我想查找x == 10的所有行,并为所有这些行设置值= 1,000。我尝试了下面的代码,但收到警告 我知道我可以通过使用.loc或.ix来避免这种情况,但是我首先需要找到满足x == 10的条件的所有行的位置或索引。有没有更直接的方法? 谢谢! 问题答案: 您应该使用以确保您正在使用视图,在您的示例中以下内容将起作用并且不会发出警告
问题内容: 在大部分操作pandas可以与运营商链接(来完成,等),但我发现过滤行唯一方法是通过正常的托架索引 这没有吸引力,因为它要求我先分配df一个变量,然后才能根据其值进行过滤。还有以下内容吗? 问题答案: 我不确定你想要什么,最后一行代码也无济于事,但是无论如何: “链式”过滤是通过“链接”布尔索引中的条件来完成的。 如果要链接方法,可以添加自己的mask方法并使用该方法。
问题内容: 将芹菜文件表明,这是一个坏主意,有任务等待的其他任务的结果。但建议的解决方案(见“好”的标题)离开是可喜爱的东西。具体来说,没有明确的方法可以将子任务的结果返回给调用者(同样,这很丑陋)。 那么,有什么方法可以“链接”工作,以便呼叫者获得最终工作的结果?例如,使用示例: 或者,可以返回Result实例吗?例如: 这样就可以通过简单的方法检索链中“最终”工作的结果: 问题答案: 您可以用
sp_getlinks(); 功能: 获取所有友情连接 参数: 无 返回 数组,友情链接列表 示例: $links=sp_getlinks(); /*获取友情链接*/ print_r($links); /*打印出获取的结果*/ 模板中用法: <php> $links=sp_getlinks(); </php> <foreach name="links
我一直在阅读“返回视图与副本”的链接。我真的不明白Pandas中的链式赋值概念是如何工作的,以及、或的用法是如何影响它的。 我获得以下代码行的警告,其中是熊猫数据框,是该数据框中的列(系列)名称: 看看这段代码,很明显我在做一些次优的事情吗?如果是这样,你能告诉我替换代码行吗? 我知道以下警告,并认为我的警告是误报: 链接分配警告/例外旨在通知用户可能无效的分配。可能存在误报;意外报告链式作业的情