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

前端之家收集整理的这篇文章主要介绍了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

谢谢你的帮助!

解决方法

你可以使用 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
原文链接:https://www.f2er.com/python/186290.html

猜你在找的Python相关文章