您的位置 首页 Python

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

我有一个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

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

关于作者: dawei

【声明】:金华站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

热门文章