В целом точка SettingWithCopyWarning
должна показывать пользователям (и другим пользователям), что они могут работать на копии, а не на оригинале, как они думают. Там есть ложные срабатывания (IOW вы знаете, что делаете, поэтому ok ). Одна из возможностей - просто отключить (по умолчанию предупреждение warn ), как предлагает @Garrett.
Ниже приведено значение для каждого параметра.
In [1]: df = DataFrame(np.random.randn(5,2),columns=list('AB'))
In [2]: dfa = df.ix[:,[1,0]]
In [3]: dfa.is_copy
Out[3]: True
In [4]: dfa['A'] /= 2
/usr/local/bin/ipython:1: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_index,col_indexer] = value instead
#!/usr/local/bin/python
Вы можете установить флаг is_copy
на False
, который эффективно отключит проверку * для этого объекта``
In [5]: dfa.is_copy = False
In [6]: dfa['A'] /= 2
Если вы копируете текст, то вы знаете, что вы делают , поэтому дальнейшее предупреждение не будет.
In [7]: dfa = df.ix[:,[1,0]].copy()
In [8]: dfa['A'] /= 2
Код, который OP показывает выше, в то время как законный, и, вероятно, что-то, что я делаю, является технически обоснованным для этого предупреждения , а не ложным положительным. Другой способ not иметь предупреждение - выполнить операцию выбора через reindex
, например
quote_df = quote_df.reindex(columns=['STK',.......])
Или,
quote_df = quote_df.reindex(['STK',.......], axis=1) # v.0.21
Посмотрев на собственный файл robots.txt Google , они делают именно то, что я задавал.
В строке 136-137 они имеют:
Disallow: /places/
Allow: /places/$
. Таким образом, они блокируют любую вещь в местах, но разрешают URL-адрес корневых мест. Единственное отличие от моего синтаксиса - порядок, первый Disallow
.
Согласно спецификации HTML 4.01, Приложение B.4.1 , значения, разрешенные в Disallow
(не предназначенные для каламбуров), являются частичными URI (представляющими частичные или полные пути ), только:
Поле «Запретить» указывает частичный URI, который не следует посещать. Это может быть полный путь или частичный путь; любой URI, начинающийся с этого значения, не будет получен. Например,
Disallow: / help запрещает как /help.html, так и /help/index.html, тогда как
Disallow: / help / запрещает /help/index.html, но allow /help.html.
blockquote>Я не думаю, что с тех пор ничего не изменилось, поскольку текущие черновики HTML5 вообще не упоминают
robots.txt
.Расширения
Однако на практике многие роботизированные двигатели (например, Googlebot ) более гибки в том, что они принимают. Если вы используете, например:
Disallow: /*.gif$
, то робот Googlebot пропустит любой файл с расширением
gif
. Я думаю, что вы могли бы сделать что-то подобное, чтобы запретить все файлы под папкой, но я не уверен на 100% (вы можете протестировать их с помощью Инструментов Google для веб-мастеров ):Disallow: /special-offers/*.*$
Другие опции
В любом случае вы не должны слишком полагаться на это (поскольку каждая поисковая система может вести себя по-другому), поэтому, если это возможно, было бы желательно использовать метатеги или заголовки HTTP . Например, вы можете настроить ваш веб-сервер для включения этого заголовка во все ответы, которые не следует индексировать (или следовать):
X-Robots-Tag: noindex, nofollow
Искать лучший способ сделать это на вашем конкретном веб-сервере. Вот пример в Apache, сочетающий
mod_rewrite
сmod_headers
, чтобы условно установить некоторые заголовки в зависимости от шаблона URL. Отказ от ответственности: я не тестировал его сам, поэтому не могу сказать, насколько он работает.# all /special-offers/ sub-urls set env var ROBOTS=none RewriteRule ^/special-offers/.+$ - [E=ROBOTS:none] # if env var ROBOTS is set then create header X-Robots-Tag: $ENV{ROBOTS} RequestHeader set X-Robots-Tag %{ROBOTS}e env=ROBOTS
(Примечание:
none
эквивалентноnoindex, nofollow
)