首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用阈值创建Python中的指示符变量,将NaN作为NaN

使用阈值创建Python中的指示符变量,将NaN作为NaN
EN

Stack Overflow用户
提问于 2020-05-05 20:12:02
回答 3查看 869关注 0票数 1

我有一些来自电导率探针的浮子数据,其中包含一些NaN的,我想将探针数据转换成一个基于经验阈值的指示变量,但是我希望NaN值保持NaNs。转换到指示器似乎很简单,但问题在于如何处理nan。

代码语言:javascript
复制
import numpy as np
import pandas as pd

x = [0, np.nan, 2, 3, 4, 51, 61, 71, 81, 91]
df = pd.DataFrame({"x":x})
df['indicator'] = (df.x <=50)*1

产量:

代码语言:javascript
复制
      x  indicator
0   0.0          1
1   NaN          0
2   2.0          1
3   3.0          1
4   4.0          1
5  51.0          0
6  61.0          0
7  71.0          0
8  81.0          0
9  91.0          0

但是我想要nan的指示器是那样的:

代码语言:javascript
复制
      x  indicator
0   0.0          1
1   NaN        NaN  
2   2.0          1
3   3.0          1
4   4.0          1
5  51.0          0
6  61.0          0
7  71.0          0
8  81.0          0
9  91.0          0

任何帮助都是非常感谢的。谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-05-05 20:26:18

你可以试试这个:

代码语言:javascript
复制
import numpy as np
import pandas as pd

x = [0, np.nan, 2, 3, 4, 51, 61, 71, 81, 91]
df = pd.DataFrame({"x":x})
df['indicator'] = df.x*(df.x <=50)

输出:

代码语言:javascript
复制
      x  indicator
0   0.0        0.0
1   NaN        NaN
2   2.0        2.0
3   3.0        3.0
4   4.0        4.0
5  51.0        0.0
6  61.0        0.0
7  71.0        0.0
8  81.0        0.0
9  91.0        0.0

准确输出:

代码语言:javascript
复制
mport numpy as np
import pandas as pd

x = [0, np.nan, 2, 3, 4, 51, 61, 71, 81, 91]
df = pd.DataFrame({"x":x})
df['indicator'] = np.where(df.x.isnull(), np.nan, df.x < 50)

输出:

代码语言:javascript
复制
      x  indicator
0   0.0        1.0
1   NaN        NaN
2   2.0        1.0
3   3.0        1.0
4   4.0        1.0
5  51.0        0.0
6  61.0        0.0
7  71.0        0.0
8  81.0        0.0
9  91.0        0.0
票数 2
EN

Stack Overflow用户

发布于 2020-05-05 20:24:25

代码语言:javascript
复制
In [1829]: df['indicator'] = df[df.x <=50]*1                                                                                                                                                                

指示符将仅针对x <= 50的行设置:

代码语言:javascript
复制
In [1830]: df                                                                                                                                                                                               
Out[1830]: 
      x  indicator
0   0.0        0.0
1   NaN        NaN
2   2.0        2.0
3   3.0        3.0
4   4.0        4.0
5  51.0        NaN
6  61.0        NaN
7  71.0        NaN
8  81.0        NaN
9  91.0        NaN
票数 2
EN

Stack Overflow用户

发布于 2020-05-05 20:50:39

我想尝试将lambda应用到列中:)

代码语言:javascript
复制
x = [0, np.nan, 2, 3, 4, 51, 61, 71, 81, 91]
df = pd.DataFrame({"x":x})
indicator = lambda x: np.nan if (np.isnan(x)) else (x<=50)*1 
df['indicator'] = df['x'].apply(indicator)
print(df)

指纹:

代码语言:javascript
复制
      x  indicator
0   0.0        1.0
1   NaN        NaN
2   2.0        1.0
3   3.0        1.0
4   4.0        1.0
5  51.0        0.0
6  61.0        0.0
7  71.0        0.0
8  81.0        0.0
9  91.0        0.0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61622195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档