Очистка данных Pandas только для выбранного столбца

#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 даже без наличия точки. Я соответствующим образом обновил свой ответ.