Как установить значение определенного поля в кадре данных панд? - PullRequest
0 голосов
/ 18 января 2019

Допустим, у меня есть датафрейм панд, например, так:

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

1 Ответ

0 голосов
/ 18 января 2019

Здесь необходимо установить позиции по DataFrame.iat, но необходимо получить позицию по столбцу по get_loc:

i = 1
df.iat[i, df.columns.get_loc('col2')]='Check'
#slowier
#df.iloc[i, df.columns.get_loc('col2')]='Check'

или устанавливается по меткам с DataFrame.at:

i = 1
df.at[df.index[i], 'col2']='Check'
#slowier
#df.loc[df.index[i], 'col2']='Check'

По умолчанию RangeIndex:

df.at[i, 'col2']='Check'

print (df)
   col1   col2
0     1       
1     2  Check
2     3       
3     4       
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...