Python Pandas:如果数据是NaN,则更改为0,否则在数据框中更改为1
发布时间:2020-12-16 23:17:44 所属栏目:Python 来源:网络整理
导读:我有一个DataFrame:df如下: row id name age url 1 e1 tom NaN http1 2 e2 john 25 NaN 3 e3 lucy NaN http3 4 e4 tick 29 NaN 我想将NaN更改为0,否则在列中更改为1:age,url. 我的代码如下,但这是错误的. import Pandas as pd df[['age','url']].applymap
我有一个DataFrame:df如下:
row id name age url 1 e1 tom NaN http1 2 e2 john 25 NaN 3 e3 lucy NaN http3 4 e4 tick 29 NaN 我想将NaN更改为0,否则在列中更改为1:age,url. import Pandas as pd df[['age','url']].applymap(lambda x: 0 if x=='NaN' else x) 我想得到以下结果: row id name age url 1 e1 tom 0 1 2 e2 john 1 0 3 e3 lucy 0 1 4 e4 tick 1 0 谢谢你的帮助! 解决方法
你可以使用
where 和
fillna ,条件是
isnull :
df[['age','url']] = df[['age','url']].where(df[['age','url']].isnull(),1) .fillna(0).astype(int) print (df) row id name age url 0 1 e1 tom 0 1 1 2 e2 john 1 0 2 3 e3 lucy 0 1 3 4 e4 tick 1 0 或 df[['age','url']] = np.where(df[['age',1) print (df) row id name age url 0 1 e1 tom 0 1 1 2 e2 john 1 0 2 3 e3 lucy 0 1 3 4 e4 tick 1 0
df[['age','url']].notnull().astype(int) print (df) row id name age url 0 1 e1 tom 0 1 1 2 e2 john 1 0 2 3 e3 lucy 0 1 3 4 e4 tick 1 0 编辑: 我尝试修改你的解决方案: df[['age','url']].applymap(lambda x: 0 if pd.isnull(x) else 1) print (df) row id name age url 0 1 e1 tom 0 1 1 2 e2 john 1 0 2 3 e3 lucy 0 1 3 4 e4 tick 1 0 时序: LEN(DF)= 4k的: In [127]: %timeit df[['age','url']].applymap(lambda x: 0 if pd.isnull(x) else 1) 100 loops,best of 3: 11.2 ms per loop In [128]: %timeit df[['age',1) 100 loops,best of 3: 2.69 ms per loop In [129]: %timeit df[['age','url']] = np.where(pd.notnull(df[['age','url']]),1,0) 100 loops,best of 3: 2.78 ms per loop In [131]: %timeit df.loc[:,['age','url']].notnull() * 1 1000 loops,best of 3: 1.45 ms per loop In [136]: %timeit df[['age','url']].notnull().astype(int) 1000 loops,best of 3: 1.01 ms per loop (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |