Панды: установите значение для фрейма данных, используя loc, а затем iloc. - PullRequest
0 голосов
/ 21 января 2019

Давайте предположим, что у меня есть следующий фрейм данных:

df = pd.DataFrame(np.zeros((3, 5)), columns=["feature_a", "feature_b", "feature_c", "feature_d", "e"])

    feature_a   feature_b   feature_c   feature_d   e
0      0.0         0.0         0.0         0.0     0.0
1      0.0         0.0         0.0         0.0     0.0
2      0.0         0.0         0.0         0.0     0.0

Однако, обратите внимание, что фрейм данных, с которым я имею дело, намного больше. Затем то, что я хотел бы сделать, это обновить значение двух средних столбцов, чтобы результат был:

    feature_a   feature_b   feature_c   feature_d   e
0      0.0         0.0         0.0         0.0     0.0
1      0.0         8.0         8.0         0.0     0.0
2      0.0         0.0         0.0         0.0     0.0

То, что я пробовал, я предполагал, что это будет работать:

feature_columns = df.filter(like="feature").columns.values
df.loc[:,feature_columns].iloc[1,[1, 2]] = 88

Для меня очень важно, чтобы это было сделано по образцу, который я пробовал. Причина этого:

  1. Столбцы, которые я хочу обновить, строго содержат шаблон.
  2. Как только я выбрал столбцы, я знаю индекс строки и столбцов, которые я хочу обновить.

В заключение мой вопрос заключается в том, как я могу перейти от начального фрейма данных к результирующему фрейму данных, имея при этом решение, которое будет следовать тому, что я пытался делать.

1 Ответ

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

Вот как вы имеете дело с конкретным примером, который вы показываете в своем вопросе:

import pandas as pd

df = pd.DataFrame(np.zeros((3, 5)), columns=["feature_a", "feature_b", "feature_c", "feature_d", "e"])
feature_columns = df.filter(like="feature").columns.values

sli = df[feature_columns].iloc[1,[1,2]]
df.loc[sli.name, sli.index] = 88
print(df)
# output
#        feature_a  feature_b  feature_c  feature_d    e
#     0        0.0        0.0        0.0        0.0  0.0
#     1        0.0       88.0       88.0        0.0  0.0
#     2        0.0        0.0        0.0        0.0  0.0

В зависимости от конкретного приложения, вам, возможно, придется немного изменить точный синтаксис, но идея широко применима: собрать столбцы и индексы по вашему выбору, затем использовать их для нарезки df.loc, а затем присвоить этому ломтик. Это должно решить проблему с «назначением для копирования», с которой вы столкнулись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...