Замените определенную строку смешанными символами в столбце

#python #pandas #numpy

Вопрос:

У меня есть фрейм данных, df, в котором я хотел бы удалить определенную строку и заменить ее «Нет». Я хотел бы удалить новую (новую) строку.

Данные

 col1    col2
5   
5       Brazil (New)
none    2
na      none
 

Желанный

 col1    col2
5   
5       none
none    2
na      none
    
 

Делающий

 print(string.replace("Brazil (New)", "none"))
 

Однако это не поддерживает остальную часть набора данных. Я все еще занимаюсь исследованиями. Мы будем признательны за любой совет.

Комментарии:

1. df['col2'] = df['col2'].str.replace("Brazil (New)", "none", regex=False) ?

2.Может быть заменен со всего фрейма данных маской df = df.mask(df.eq('Brazil (New)'), 'none')

3. @It_is_Chris по какой-то причине это не сработало

4. @Линн, что вы подразумеваете под «не сработало»? Вы получили сообщение об ошибке?

5. @HenryEcker это работает

Ответ №1:

Попробуйте с DataFrame.mask помощью заменить значения, основанные на том, где они равны данной строке:

 df = df.mask(df.eq('Brazil (New)'), 'none')
 

df :

    col1  col2
0     5   NaN
1     5  none
2  none     2
3    na  none
 

Конкретные столбцы также могут быть указаны и перезаписаны:

 cols = ['col2']
df[cols] = df[cols].mask(df.eq('Brazil (New)'), 'none')
 
    col1  col2
0     5   NaN
1     5  none
2  none     2
3    na  none
 

Объяснение:

 df.eq('Brazil (New)')
 
     col1   col2
0  False  False
1  False   True
2  False  False
3  False  False
 

Затем замените указанное значение , где бы оно ни находилось True , в данном случае на none .

    col1  col2
0     5   NaN
1     5  none
2  none     2
3    na  none
 

Используемый фрейм данных:

 import numpy as np
import pandas as pd

df = pd.DataFrame({'col1': {0: '5', 1: '5', 2: 'none', 3: 'na'},
                   'col2': {0: np.nan, 1: 'Brazil (New)', 2: '2', 3: 'none'}})
 

Ответ №2:

Вы можете попробовать это таким образом:

 to_replace = "Brazil (New)"

for column in range(df.shape[1]):
    col_name = df.columns[column]
    df.loc[df[col_name] == to_replace, col_name] = None
 

Он должен заменить значение «to_replace» на » нет » ни в одном из столбцов.