Я читал по этому поводу и до сих пор находят предмет немного запутанным: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copyУстановите первую и последнюю строку столбца в dataframe
Скажем, у меня есть Панды DataFrame, и я хочу, чтобы одновременно установить первый и последние элементы строки одного столбца для любого значения. Я могу это сделать:
df.iloc[[0, -1]].mycol = [1, 2]
, который говорит мне A value is trying to be set on a copy of a slice from a DataFrame.
и что это потенциально опасно.
Вместо этого я мог бы использовать .loc
, но тогда мне нужно знать индекс первой и последней строк (в constrast, .iloc
позволяет мне получить доступ по местоположению).
Что является самым безопасным способом Pandasy для этого?
Чтобы добраться до этой точки:
# Django queryset
query = market.stats_set.annotate(distance=F("end_date") - query_date)
# Generate a dataframe from this queryset, and order by distance
df = pd.DataFrame.from_records(query.values("distance", *fields), coerce_float=True)
df = df.sort_values("distance").reset_index(drop=True)
Затем я пытаюсь вызова df.distance.iloc[[0, -1]] = [1, 2]
. Это вызывает предупреждение.
делает 'df ['mycol']. Iloc [[0, -1]] = [1, 2]' работает? – EdChum
Такое же предупреждение, если я сначала индексирую строки или столбцы. – Quentin
Вам нужно будет показать точно все шаги, которые приводят к предупреждению, поскольку мой ответ показывает, что это правильно работает – EdChum