[英]Create a new column based on condition of another column with apply lambda function
[英]pandas dataframe: failed to apply lambda function to create new column based on condition if NaN or NA or \n or \t etc then 'No' else 'Yes'
我有一個熊貓數據框:
data = pd.DataFrame({'myCol': ['NaN','NA','xsysdf dfsf','ertrret ertret','\n','sdfdsfsdfsf','erw3242werw']
})
我想做的是:
根據以下條件創建列myCol1
,即如果myCol
包含“NA”或“NaN”值或“為空”(可能是因為\n
或\t
之類的東西),在myCol1
中,該值將顯示為No
否則Yes
這樣,我的新數據框應該如下所示:
新數據框:
myCol myCol1
NaN No
NA No
xsysdf dfsf Yes
ertrret ertret Yes
\n No
sdfdsfsdfsf Yes
erw3242werw Yes
我想做的是如下:
data['myCol1'] = data['myCol'].apply(lambda x: 'No' if(str(x) == 'nan') else 'Yes')
data['myCol1'] = data['myCol'].apply(lambda x: 'No' if np.isnan else 'Yes')
data['myCol1'] = data['myCol'].apply(lambda x: 'No' if(np.all(pd.notnull(x))) else 'Yes')
但是上面的每一個代碼都將結果發送給我,因為所有行 = 'No'
data.groupby('myCol2').size()
myCol2
No 223567
dtype: int64
這將起作用:
import numpy as np
exclusions = ['nan', 'na', '\n', '\t']
data['myCol1'] = data['myCol'].apply(lambda x: any([x.lower() == exclusion for exclusion in exclusions]))
data['myCol1'] = np.where(data['myCol1'], 'No', 'Yes')
這幾乎沒問題,除了預期的字符串是'NaN'
而不是'nan'
:
# data['myCol1'] = data['myCol'].apply(lambda x: 'No' if(str(x) == 'nan') else 'Yes')
data['myCol1'] = data['myCol'].apply(lambda x: 'No' if(str(x).lower() == 'nan') else 'Yes')
這個檢查函數np.isnan
的真實性而不是調用函數,所以它總是返回True
的情況。 此外, np.isnan
不能用於非數字類型:
# data['myCol1'] = data['myCol'].apply(lambda x: 'No' if np.isnan else 'Yes')
這里x
是來自 DataFrame 中單個單元格的字符串,因此np.all
將遍歷字符串中的字符並檢查每個字符的條件。 由於所有字符串都沒有空字符,因此始終返回True
情況:
# data['myCol1'] = data['myCol'].apply(lambda x: 'No' if(np.all(pd.notnull(x))) else 'Yes')
試試這個:
def process_data(data):
if str(data).lower() == 'nan' or str(data).lower() == 'na' or str(data).strip() == '':
return 'No'
return 'Yes'
data['myCol1'] = data['myCol'].apply(process_data)
print (data)
輸出:
myCol myCol1
0 NaN No
1 NA No
2 xsysdf dfsf Yes
3 ertrret ertret Yes
4 \n No
5 sdfdsfsdfsf Yes
6 erw3242werw Yes
無論您是否具有NA
值或編碼為字符串'NA'
值,這都將起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.