#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)