Python Pandas:如果数据是NaN,则更改为0,否则在数据框中更改为1
发布时间:2021-01-11 08:29:07  所属栏目: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:ag
                
                
                
            | 
                         我有一个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 (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!  | 
                  
