2016-08-04 2 views
1

Вот мой ДФ:Python панд: заменяющие значения на основе местоположения не значение индекса

In[12]: df = pd.DataFrame(data = list("aabbcc"), columns = ["s"], index=range(11,17)) 
In[13]: df 
Out[13]: 
    s 
11 a 
12 a 
13 b 
14 b 
15 c 
16 c 

Теперь, заменив значения на основе значений индекса:

In[14]: df.loc[11, "s"] = 'A' 
In[15]: df 
Out[15]: 
    s 
11 A 
12 a 
13 b 
14 b 
15 c 
16 c 
In[16]: df.ix[12, "s"] = 'B' 
In[17]: df 
Out[17]: 
    s 
11 A 
12 B 
13 b 
14 b 
15 c 
16 c 

Можно ли сделать то же самое Based на позиции не значение индекса, что-то вроде этого, но он показывает ValueError (ValueError: Can only index by location with a [integer, integer slice (START point is INCLUDED, END point is EXCLUDED), listlike of integers, boolean array]):

In[18]: df.iloc[1, "s"] = 'b' 

И, если я пытаюсь что-то вроде этого:

df.s.iloc[1] = "b" 

Я получаю это предупреждение:

SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame 
+2

Диафрагменное Первая ошибка, которую вы получаете, заключается в том, что вы пытаетесь использовать индексирование на основе целых чисел со строкой. try 'df.iloc [1, 0] = 'b''. Это полный код, который вы используете? 'df.s.iloc [1] =" b "' не вызывает ошибку при запуске. Я ожидал бы увидеть предупреждение, которое вы получаете, если 'df' был создан путем разрезания другого фрейма данных. – johnchase

+0

@johnchase: Отличное объяснение, спасибо :) – ramesh

ответ

3

Вы можете использовать get_loc, чтобы получить расположение колонки и передать в iloc:

df.iloc[1, df.columns.get_loc('s')] = 'B' 

df 
Out: 
    s 
11 a 
12 B 
13 b 
14 b 
15 c 
16 c 

Или наоборот:

df.loc[df.index[1], 's'] = 'B' 
+0

Да, это работает :) – ramesh

Смежные вопросы