我一直在阅读这个链接的"返回视图与副本".我真的不明白的是如何链接分配在熊猫的概念工作和如何的使用.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)
Run Code Online (Sandbox Code Playgroud)
看看这段代码,我做的事情显然不是很理想吗?如果是这样,你能告诉我更换代码行吗?
我知道下面的警告,并且认为我的案例中的警告是误报:
链式分配警告/异常旨在通知用户可能无效的分配.可能存在误报; 无意中报告链式作业的情况.
编辑:导致第一次复制警告错误的代码.
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:"
Run Code Online (Sandbox Code Playgroud) 我有一个熊猫数据框。我正在尝试修改name最后一行中的列值
我尝试
df.loc[-1,'name'] = "something"
Run Code Online (Sandbox Code Playgroud)
这有效
df现在我用查询过滤几行并调用它df_query
我的最后一行df_query是
id name
21 965 kris
Run Code Online (Sandbox Code Playgroud)
我检查索引-1
df_query.loc['name'].iloc[-1]
Run Code Online (Sandbox Code Playgroud)
它显示“克里斯”
现在df_query我尝试
df_query.loc[-1,'name'] = "something"
Run Code Online (Sandbox Code Playgroud)
它添加了一个额外的行而不是替换kris为something
id name
21 965.0 kris
-1 NaN "something"
Run Code Online (Sandbox Code Playgroud)
还将 id 转换为floatfromint
为什么有时有效有时无效
后来搜索后我发现/sf/answers/3465732861/
仅使用 iloc[-1, 'a] 不起作用,因为 -1 不在索引中。
我无法理解上面给出的原因
并说要尝试:
df_query.loc[df_query.loc.index[-1],'name'] = "something"
Run Code Online (Sandbox Code Playgroud)
现在可以了。
有人可以解释发生了什么吗