Замена панд не работает должным образом на множестве столбцов - PullRequest
0 голосов
/ 13 июня 2018

Кажется, есть проблема с опцией pandas replace () при замене только нескольких столбцов:

# Example dataframe:
pd.DataFrame(data={"x":[1,2,3,4,5], "y":[2,4,1,2,4], "z":["no", "yes", "no", "no", "no"], "t":["a", "b", "c", "d", "d"]})

# Try to replace the 2s inplace:
a.loc[:, ["x", "y"]].replace(2,-9999, inplace=True)

a по-прежнему:

Out[32]: 
x  y    z  t
0  1  2   no  a
1  2  4  yes  b
2  3  1   no  c
3  4  2   no  d
4  5  4   no  d

Обратите внимание, что я делаюне получаю предупреждение setupWithCopy - также я использую .loc как рекомендовано.Поскольку я использую inplace = True, я ожидал, что датафрейм изменится.Я делаю что-то не так, или это сообщение об ошибке на github?

Я использую панд версии 0.23.0.

1 Ответ

0 голосов
/ 13 июня 2018

Вы не можете использовать inplace=True, потому что подмножество возвращает Серию, которая может иметь свои данные в качестве представления.Изменение его на месте не всегда распространяет его на родительский объект.Вот почему это предупреждение есть (или поднять, если вы установите опцию).Вы никогда не должны этого делать, и это никогда не является причиной для этого.

a.loc[:, ["x", "y"]] = a.loc[:, ["x", "y"]].replace(2,-9999)
print (a)
      x     y    z  t
0     1 -9999   no  a
1 -9999     4  yes  b
2     3     1   no  c
3     4 -9999   no  d
4     5     4   no  d

Другое решение - update, по умолчанию работает inplace:

a.update(a.loc[:, ["x", "y"]].replace(2,-9999))
print (a)
      x     y    z  t
0     1 -9999   no  a
1 -9999     4  yes  b
2     3     1   no  c
3     4 -9999   no  d
4     5     4   no  d
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...