Заменить элемент списка в кадре данных панд - PullRequest
0 голосов
/ 14 мая 2018
df=pd.DataFrame({"a":[1,2,3,[4,5],["apple","pear"]]})
df.replace({[4,5]:4.5})
df.replace({["apple","pear"]:"apple"})

Здесь я получил TypeError. Я хочу заменить определенные списки, и нет никакого регулирования между списком, который должен быть заменен, и объектом, используемым для замены списка.

Ответы [ 2 ]

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

Существует один способ использования astype, даже если он работает, но я все равно настоятельно рекомендую использовать ответ Колда.

df.astype(str).replace({'[4, 5]':4.5,"['apple', 'pear']":"apple"})
Out[159]: 
       a
0      1
1      2
2      3
3    4.5
4  apple
0 голосов
/ 14 мая 2018

Это , а не тривиальная проблема, потому что DataFrames не предназначены для работы с изменяемыми объектами, такими как списки, наборы или диктовки.

Вы можете определить индекс совпадения и соответственно заменить.

m = [v == [4, 5] for v in df['a']] 
df.loc[m, 'a'] = 4.5

df
               a
0              1
1              2
2              3
3            4.5
4  [apple, pear]

Аналогичная процедура применяется для ['apple', 'pair']. Вы можете создать функцию из этого, если хотите:

def replace(df, col, key, val):
    m = [v == key for v in df[col]]
    df.loc[m, col] = val

replace(df, 'a', [4, 5], 4.5)
replace(df, 'a', ['apple', 'pear'], 'apple')

df
       a
0      1
1      2
2      3
3    4.5
4  apple

Примечание: функция работает на месте.

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