gpt4 book ai didi

pandas - Python Pandas : if the data is NaN, 然后更改为 0,否则在数据框中更改为 1

转载 作者:行者123 更新时间:2023-12-04 05:36:51 25 4
gpt4 key购买 nike

我有一个 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.where isnull :
df[['age', 'url']] = np.where(df[['age', 'url']].isnull(), 0, 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

最快的解决方案 notnull astype :
df[['age', 'url']] = 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']] = 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']] = 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', 'url']] = np.where(df[['age', 'url']].isnull(), 0, 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']] = df[['age', 'url']].notnull() * 1
1000 loops, best of 3: 1.45 ms per loop

In [136]: %timeit df[['age', 'url']] = df[['age', 'url']].notnull().astype(int)
1000 loops, best of 3: 1.01 ms per loop

关于pandas - Python Pandas : if the data is NaN, 然后更改为 0,否则在数据框中更改为 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38607381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com