I have been reading this link on \"Returning a view versus a copy\". I do not really get how the chained assignment concept in Pandas works and how the usage of .ix()
, .iloc()
, or .loc()
affects it.
I get the SettingWithCopyWarning
warnings for the following lines of codes, where data
is a Panda dataframe and amount
is a column (Series) name in that dataframe:
data[\'amount\'] = data[\'amount\'].astype(float)
data[\"amount\"].fillna(data.groupby(\"num\")[\"amount\"].transform(\"mean\"), inplace=True)
data[\"amount\"].fillna(mean_avg, inplace=True)
Looking at this code, is it obvious that I am doing something suboptimal? If so, can you let me know the replacement code lines?
I am aware of the below warning and like to think that the warnings in my case are false positives:
The chained assignment warnings / exceptions are aiming to inform the user of a possibly invalid assignment. There may be false positives; situations where a chained assignment is inadvertantly reported.
EDIT : the code leading to the first copy warning error.
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:\"