#python #pandas
#python #pandas
Вопрос:
Я недавно работаю с Pandas, и я столкнулся с проблемой в процессе очистки данных Здесь, мне нужно заменить значение столбца, имеющее точечный шаблон, т. е. «…» или «…………» из Pandas в NaN
Мой фактический фрейм данных, то есть энергия
То, что я делаю сейчас, просто использует метод replace для замены этого пунктирного шаблона на NaN
Вот мой код:
energy.replace('...*','NaN', regex=True, inplace=True)
Мой вывод:
Мой вывод после приведенного выше кода
Я успешно очистил свои данные с пунктирным рисунком до NaN, но все значение в моем столбце country также было изменено на NaN, как показано на 2-м изображении. Я попытался найти в этом выпуске информацию о том, как изменить только выбранные значения столбца, и получил другой метод, но ни один из них не работает для моих сценариев.
Кто-нибудь может мне помочь в этом?
Комментарии:
1. Я правильно очистил свои данные без изменения названия страны, применив метод replace к отдельному столбцу energy[‘Column_Name’].replace(‘.*’,’NaN’, regex= True, inplace = True) , но это неподходящий метод, как если бы у меня было 90 столбцов с этим » … » шаблон в столбце, и я хочу, чтобы это значение было заменено на NaN, применение метода replace по столбцу было бы действительно плохим!!!
Ответ №1:
Ваш столбец country изменился, потому что вы используете регулярное выражение, а в regex .
это символ для чего угодно. Возможно, вы захотите использовать регулярное выражение, подобное этому, '. '
которое будет соответствовать любому количеству .
символов. Это решение, которое не требует от вас ограничивать выполнение определенным столбцом.
Результат при использовании .
in energy.replace(r'. ', 'NaN', regex=True, inplace=True)
в моей макетной модели ваших данных выглядит следующим образом:
>>> energy
Country Energy Supply Energy Supply Per Capita % Renewable
0 some_string 16846846 484 85.48648
1 some_string 16846846 484 85.48648
2 some_string 16846846 484 85.48648
3 some_string NaN NaN 85.48648
4 some_string 16846846 484 85.48648
Для полноты картины вы также можете ограничить выполнение только определенным столбцом, вызвав функцию replace только для этого столбца:
energy['Energy Supply'].replace(r'. ', 'NaN', regex=True, inplace=True)
Это дает результат:
>>> energy
Country Energy Supply Energy Supply Per Capita % Renewable
0 some_string 16846846 484 85.4865
1 some_string 16846846 484 85.4865
2 some_string 16846846 484 85.4865
3 some_string NaN ... 85.4865
4 some_string 16846846 484 85.4865
Комментарии:
1. Я также пробовал это регулярное выражение ‘ .*’, но оно печатает NaN после каждой буквы страны в столбце country. например: nanananlnanbnanannannnaninananan для страны Албания
2. @AnkurSingh Виноват, я использовал
*
вместо, что означало, что он вставил NaN даже без наличия точки. Я соответствующим образом обновил свой ответ.