#python #pandas #dataframe
Вопрос:
У меня есть этот фрейм данных:
id cars rent sale
0 123 Kia 2
1 345 Bmw 1 4
2 Mercedes 1
3 345 Ford 1
4 Audi 2 1
Я хочу заполнить пустое поле только в идентификаторе столбца «Na» и оставить пустой код в других столбцах(аренда/Продажа)
Есть какие-нибудь предложения, пожалуйста?
Ожидаемый результат:
id cars rent sale
0 123 Kia 2
1 345 Bmw 1 4
2 Na Mercedes 1
3 345 Ford 1
4 Na Audi 2 1
Комментарии:
1.
df.id = df.id.astype(str).str.replace("^s*$", "Na")
Работает?
Ответ №1:
Поскольку ваш id
столбец смешан с объектами с плавающей точкой и пустыми полями, и предположим, что вы не хотите изменять объекты с плавающей точкой на строки, вы можете использовать .replace()
регулярное выражение следующим образом:
df['id'] = df['id'].replace(r'^s*
Объяснение:
Регулярное ^s*$
выражение соответствует нулю или большему количеству пробелов s
во всех строках. Таким образом, он соответствует пустой строке (ноль пробелов), одному символу пробела, двум символам пробела и т.д. Он заменяет только один Na
, независимо от того, сколько совпадающих пробелов (например, не будет заменяться NaNa
даже 2 символами пробела).
^
Начало привязки строки (вместе с $
для обозначения соответствия для всей строки)
s
Пустое пространство
*
Нулевое или более повторение предшествующего ему символа ( s
).
$
Конец веревочного якоря
Результат:
print(df)
id cars rent sale
0 123 Kia 2
1 345 Bmw 1 4
2 Na Mercedes 1
3 345 Ford 1
4 Na Audi 2 1
Ответ №2:
Попробуй:
df.id = df.id.replace("", "Na")
print(df)
С принтами:
id cars rent sale
0 123 Kia 2
1 345 Bmw 1 4
2 Na Mercedes 1
3 345 Ford 1
4 Na Audi 2 1
ИЗМЕНИТЬ: Если пустые ячейки не ""
являются строками:
df.id = df.id.apply(lambda x: x if x.strip() else "Na")
print(df)
Комментарии:
1. @AhmedChater Убедитесь, что пустые ячейки на самом деле
""
являются строками.2. На самом деле это плавающий объект
Ответ №3:
Вы можете использовать фрейм данных.где
df['id'] = df.where(~(df['id'] == ''), other='Na')
Из документации:
Если значение cond равно True, сохраните исходное значение. Где False, замените соответствующим значением из другого
Изменить: Если id
столбца нет ""
, то
df['id'] = df.where(~(df['id'].str.strip() == ''), other='Na')
Комментарии:
1. У меня есть объект с плавающей точкой, поэтому я не могу использовать полосу
, 'Na', regex=True)
Объяснение:
Регулярное ^s*$
выражение соответствует нулю или большему количеству пробелов s
во всех строках. Таким образом, он соответствует пустой строке (ноль пробелов), одному символу пробела, двум символам пробела и т.д. Он заменяет только один Na
, независимо от того, сколько совпадающих пробелов (например, не будет заменяться NaNa
даже 2 символами пробела).
^
Начало привязки строки (вместе с $
для обозначения соответствия для всей строки)
s
Пустое пространство
*
Нулевое или более повторение предшествующего ему символа ( s
).
$
Конец веревочного якоря
Результат:
Ответ №2:
Попробуй:
С принтами:
ИЗМЕНИТЬ: Если пустые ячейки не ""
являются строками:
Комментарии:
1. @AhmedChater Убедитесь, что пустые ячейки на самом деле
""
являются строками.2. На самом деле это плавающий объект
Ответ №3:
Вы можете использовать фрейм данных.где
Из документации:
Если значение cond равно True, сохраните исходное значение. Где False, замените соответствующим значением из другого
Изменить: Если id
столбца нет ""
, то
Комментарии:
1. У меня есть объект с плавающей точкой, поэтому я не могу использовать полосу