Задача упрощается:SettingWithCopyWarning при использовании .loc
Мне нужно извлечь и изменить отдельные строки в DataFrame
основе, имеет ли текст в колонке с «-» характер. Тире и все, что нужно, нужно удалить, а оставшийся текст должен быть тем, что было перед «-».
have:
textcol
0 no dash here
1 one - here
want:
textcol
0 one
вот код, используемый для воссоздания моего сценария.
df = pd.DataFrame(data=['no dash here', 'one - here'], index=[0, 1], columns=['textcol'])
df2 = df[df['textcol'].str.contains('-') == True]
df2.loc[:, ['textcol']] = df2['textcol'].str.split('-').str[0]
Полученные DataFrame
df2 дает результат, что я желаю, с одним исключением. Каждый раз, когда я называю df2 (или любое производное после этого) я получаю следующее 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
Я пытался сделать то, что я хотел по-другому, и был дан подобную ошибку, что поручил мне, чтобы попытаться использовать .loc()
вместо этого, но я все еще получаю эту аналогичную ошибку.
Есть ли лучший способ избежать ошибок, чтобы я мог достичь этого результата? Я боюсь, что здесь что-то происходит, что я не понимаю и что в конечном итоге df2 не приведет к тому, что я хочу. Мне также интересно, будет ли что-то вроде .query()
работать.
Вы получили представление/копию, когда вы назначили 'df2', который хотите работать непосредственно на df:' df.loc [df ['textcol']. Str.contains ('-'), 'textcol '] = df [' textcol ']. str.split (' - '). str [0] 'Я думаю, должен работать – EdChum
@EdChum, я все равно получаю ту же ошибку :( – Lisle