在包含整数和字符串

时间:2017-08-29 20:50:01

标签: python string pandas integer nan

我有一个数据框,其中a,b,c列包含整数和字符串,如下所示:

a    | b    | c
0.82 | 1.17 | 2.05
0.02 | ND   | ND
2.00 | 1.08 | 0.02*

我需要找到每行的最小/最大值,并使用相应的值填充标题为“Min”/“Max”的新的第四/第五列,同时将ND视为最小值。我可以用

找到第一行的最小/最大值
df.loc[["a", "b", "c"]].min(axis=1) 
#and max(axis=1)

并使用

为第二个工作
df.loc[((data["a"].isin(["ND"])) | (data["b"].isin(["ND"])) |
       (data["c"].isin(["ND"])), "Min"] = "ND"

但不知道我应该为第三排的0.02 *做些什么。我需要对整数进行比较,但在填充“Min”列时保持值,因此最终结果看起来像

a    | b    | c     | Min   | Max
0.82 | 1.17 | 2.05  | 0.82  | 2.05
0.02 | ND   | ND    | ND    | 0.02
2.00 | 1.08 | 0.02* | 0.02* | 2

我的整个数据框中有*超过200个值,因此无法手动替换。我考虑先删除*但不确定当我必须填充min / max列时如何恢复它们。

如果有人有解决方法,我们将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:3)

看起来您需要对数据进行一些内务管理。有几个df.replace来电应该这样做:

df = df.astype(str).replace('ND', np.nan)\
           .replace('\*', '', regex=True).astype(float)
print(df)

      a     b     c
0  0.82  1.17  2.05
1  0.02   NaN   NaN
2   2.0  1.08  0.02

现在,应用maxmin

df['Max'] = df.max(1)
df['Min'] = df.min(1)

print(df)

      a     b     c   Max   Min
0  0.82  1.17  2.05  2.05  0.82
1  0.02   NaN   NaN  0.02  0.02
2  2.00  1.08  0.02  2.00  0.02

根据您的约束进行更新:

dftemp = df.astype(str).replace('ND', -np.inf)\
               .replace('\*', '', regex=True).astype(float)    
df['Max'] = dftemp.max(1)
df['Min'] = dftemp.min(1).replace(-np.inf, 'ND')      

print(df)    
      a     b      c   Max   Min
0  0.82  1.17   2.05  2.05  0.82
1  0.02    ND     ND  0.02    ND
2   2.0  1.08  0.02*  2.00  0.02