我有一些来自电导率探针的浮子数据,其中包含一些NaN的,我想将探针数据转换成一个基于经验阈值的指示变量,但是我希望NaN值保持NaNs。转换到指示器似乎很简单,但问题在于如何处理nan。
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产量:
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的指示器是那样的:
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任何帮助都是非常感谢的。谢谢。
发布于 2020-05-05 20:26:18
你可以试试这个:
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)输出:
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准确输出:
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)输出:
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发布于 2020-05-05 20:24:25
In [1829]: df['indicator'] = df[df.x <=50]*1 指示符将仅针对x <= 50的行设置:
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发布于 2020-05-05 20:50:39
我想尝试将lambda应用到列中:)
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)指纹:
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.0https://stackoverflow.com/questions/61622195
复制相似问题