#python #pandas
#python #pandas
Вопрос:
Возможно ли объединить следующие три оператора в один?
raw_df = df.copy().astype({'ids': 'str'})
raw_df['dels'] = np.where(raw_df['dels'] == 'nan', None, raw_df['dels'])
raw_df['langs'] = np.where(raw_df['langs'] == 'nan', None, raw_df['langs'])
Если да, то как это можно сделать?
Ответ №1:
Вы можете использовать этот assign
метод для создания новых столбцов / перезаписи существующих столбцов. Вы также можете сократить логику здесь с np.where
помощью Series.mask
(или Series.replace
), поскольку все, что вы хотите сделать, это поменять наш 'nan'
на None
и оставить остальную часть столбца нетронутой.
Не видя копии ваших данных, я не могу быть уверен, что это сработает, но вы можете попробовать:
new_df = (raw_df.copy()
.astype({"ids": "str"})
.assign(
dels=lambda df: df["dels"].mask(df["dels"] == 'nan', None),
langs=lambda df: df["langs"].mask(df["langs"] == 'nan', None))
)
В качестве альтернативы, если вы просто хотите продолжить и заменить 'nan'
for None
по всему фрейму данных (а не только по 2 столбцам), вы можете сделать это следующим образом:
new_df = (raw_df.copy()
.astype({"ids": "str"})
.replace("nan", None))
Комментарии:
1. спасибо за это, почему вы окружаете это утверждение
(...)
?2. Я заключаю оператор в круглые скобки, потому что мне удобнее читать связанные операции, если каждая из них находится в отдельной строке. Вы также можете использовать обратную косую
черту в конце каждой строки для достижения того же результата, но я нахожу использование круглых скобок более привлекательным, поскольку это позволяет избежать большого количества обратных косых черт в вашем коде. У Тома Аугспургера (основного разработчика pandas) есть отличный пост в блоге о цепочке методов , который я настоятельно рекомендую всем.