Вставьте NA в определенную строку / столбец панд - PullRequest
0 голосов
/ 15 мая 2018

Я хочу разместить NA в определенных позициях строки / столбца.

df_test = pd.DataFrame(np.random.randn(5, 3), 
                  index=['a', 'b', 'c', 'd', 'e'],
                  columns=['one', 'two', 'three'])

rows = pd.Series([True, False, False, False, True], index = df_test.index)

Я хочу добавить в NA для указанных строк и без столбца 'two'. Я попробовал это:

df_test[rows].drop(['two'], axis = 1) = np.nan

Но это возвращает ошибку:

SyntaxError: невозможно назначить вызов функции

1 Ответ

0 голосов
/ 15 мая 2018

Это не сработает, Python просто не поддерживает этот вид синтаксиса, т. Е. Присваивает вызовы функций.Кроме того, drop возвращает копию, поэтому удаление столбца и работа с возвращенным фреймом данных не изменяет оригинал.

Ниже приведено несколько вариантов, с которыми вы можете работать.

loc + pd.Index.difference

Здесь вам нужно присвоение на основе loc:

df_test.loc[rows, df_test.columns.difference(['two'])] = np.nan
df_test

        one       two     three
a       NaN  0.205799       NaN
b  0.296389 -0.508247  0.026844
c  0.970879 -0.549491 -0.056991
d -1.474168 -1.694579  1.493165
e       NaN -0.159641       NaN

loc работает на месте, изменяя исходный DataFrame по своему усмотрению.Вы также можете заменить df_test.columns.difference(['two']) на ['one', 'three'], если хотите.


df.set_value

Для более старых версий панд вы можете использовать df.set_value (не на месте)) -

df_test.set_value(df_test.index[rows], df_test.columns.difference(['two']), np.nan)
        one       two     three
a       NaN  1.562233       NaN
b -0.755127 -0.862368 -0.850386
c -0.193353 -0.033097  1.005041
d -1.679028  1.006895 -0.206164
e       NaN -1.376300       NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...