#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» на » нет » ни в одном из столбцов.