Допустим, у меня есть датафрейм панд, например, так:
d = {'col1': [1, 2, 3, 4], 'col2': ['','','','']}
df = pd.DataFrame(data=d)
и по какой-то причине я должен перебрать все его строки и дать col2
определенное значение. Мой цикл теперь в i=1
и col2
должен быть 'Check!'
.
Легко, кажется, просто
df.iloc[i]['col2']='Check'
однако, это выдает предупреждение, а ссылку , и кажется, что это оправдано, так как df.iloc[i]['col2']
просто возвращает мою empy ''
вместо 'Check!'
, как должно.
Почти тот же вопрос задается (и решается) здесь , однако команда key .is_copy
устарела, похоже (я не получаю ошибку каждый раз, странно ...), таким образом Я не решаюсь его использовать.
So
ri = df.iloc[i]
ri.is_copy = False
newval = 'Check!'
ri['col2']=newval
df.iloc[i]=ri
работает и приятно и просто, но, видимо, скоро перестанет работать, так что это не оптимально.
EDIT
Возможно, имеет смысл включить предупреждение в вопрос, чтобы сделать его более понятным и повысить его удобство использования:
In [1]: df.iloc[i]['col2']='Check'
Out[1]: /some/path/ipython:1: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy