加入收藏 | 设为首页 | 会员中心 | 我要投稿 商洛站长网 (https://www.0914zz.com/)- AI应用、CDN、边缘计算、云计算、物联网!
当前位置: 首页 > 编程开发 > Python > 正文

Python Pandas:如果数据是NaN,则更改为0,否则在数据框中更改为1

发布时间:2021-01-11 08:09:43 所属栏目: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

谢谢你的帮助!

解决方法

你可以使用 wherefillna,条件是 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

numpy.whereisnull

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

notnullastype最快的解决方案:

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

(编辑:商洛站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读