我想檢查某些列(大約 5 或 6 個),如果所有列都為空,請將另一列has_nan從更改0為1。我知道如何過濾/屏蔽,但是在使用時loc我得到了可怕的SettingWithCopyWarning.這是一個小例子來說明,不完全相同,但它突出了問題:df = pd.DataFrame([np.random.randint(0,100,3), np.random.randint(0,100,3), np.random.randint(0,100,3), np.random.randint(0,100,3)], columns=['foo', 'bar', 'has_nan'])for i in ['use_1', 'use_2']: df[i] = 2 * ['5'] + 2 * [np.nan]df.loc[df.use_1.isna() & df.use_2.isna()]['has_nan'] = 'yes'
3 回答

陪伴而非守候
TA貢獻(xiàn)1757條經(jīng)驗 獲得超8個贊
df['has_nan'] = df[['use_1', 'use_2']].isnull().all(1)
使用布爾值系列,即一種含True
/False
值僅是在推薦的方法。如果您堅持轉(zhuǎn)換為'yes'
/'no'
字符串,您可以在后續(xù)步驟中通過字典映射進(jìn)行轉(zhuǎn)換:
mapper = {1: 'yes', 0: 'no'} df['has_nan'] = df['has_nan'].map(mapper)

弒天下
TA貢獻(xiàn)1818條經(jīng)驗 獲得超8個贊
你是這個意思?:
df['has_nan'][df['column_name'].isna()] = 0
df['has_nan'][~df['column_name'].isna()] = 1
添加回答
舉報
0/150
提交
取消