Преобразовать» -» используется для пустых столбцов в фрейме данных в 0 без изменения отрицательных значений?

#python #pandas #dataframe #replace #isnull

#python #pandas #фрейм данных #заменить #isnull

Вопрос:

У меня есть столбец в фрейме данных, который выглядит следующим образом

 Index Col
0     -1
1      2
2     -3
3      -
4      3
5     - 
6     -7 
  

как мне заменить «-«, используемый для представления нулевых значений в Col (например, в индексе 3 и 5) в 0, без изменения знака минус перед отрицательными значениями на ноль. текущий dtype — это object, и я планирую изменить его на значение с плавающей точкой после обработки нулевых значений.

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

1. Col Имеет тип string? Вы могли бы использовать регулярное выражение, такое как ^-$ , чтобы найти эти строки тогда.

2. да, тип является строковым . Итак, вы предлагаете найти все «-» и, если за ними не следует число, превратить их в 0? Отрицательные числа также являются строками, я мог бы превратить их в числа с плавающей точкой, удалив знак — , преобразовав в число с плавающей точкой и умножив на -1, но кажется немного непитоническим. Искал что-то немного лаконичное? Спасибо за предложение, я буду иметь это в виду, если все остальное не сработает 🙂

Ответ №1:

Вы можете использовать замену следующим образом:

 df.replace('-', 0).astype(float)
  

Вывод:

        Col
Index     
0     -1.0
1      2.0
2     -3.0
3      0.0
4      3.0
5      0.0
6     -7.0
  

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

1. Это работает . я уверен, что я пытался использовать ключевое слово replace, но продолжал что-то портить. Большое спасибо 🙂

2. Вы можете использовать inplace = true ИЛИ повторно присвоить значение df.

Ответ №2:

Попробуйте это

 df[df.Col.eq('-')] = 0
print(df)
  

Вывод:

   Col
0  -1
1   2
2  -3
3   0
4   3
5   0
6  -7
  

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

1. Ммм, спасибо, но это преобразует всю строку в ноль, включая другие столбцы, я просто хочу, чтобы этот конкретный элемент изменился на 0, а не на всю строку. В любом случае спасибо 🙂

2. это не изменяет другие столбцы

Ответ №3:

Вы могли бы просто использовать

 df["Col"] = df.Col.str.replace('^-$', '0')
print(df)