Python 3.x Python替换错误

Python 3.x Python替换错误,python-3.x,pandas,Python 3.x,Pandas,我的数据框如下所示: Date WaterTemp 1 21.4 2 20.8 3 20.4 4 20.0 5 19.9 6 20.5 7 20.8 8 21.4 9 21.7 10 22.1 11 21.9 12 21.3 13 21.5 14 21.6 15 21.4 16 21.7 17

我的数据框如下所示:

Date  WaterTemp
1       21.4
2       20.8
3       20.4
4       20.0
5       19.9
6       20.5
7       20.8
8       21.4
9       21.7
10       22.1
11       21.9
12       21.3
13       21.5
14       21.6
15       21.4
16       21.7
17       22.4
18       22.4
19       22.5
20       22.6
21       23.1
22       23.8
23       23.8
24       23.1
25       22.9
26       23.4
27       23.6
28       23.4
29       24.1
30       24.6
31       24.1
32       23.9
33       23.6
34       23.3
35       23.2
36       23.4
37       23.1
38       22.3
39       22.4
40       22.4
wt = df['WaterTemp']

for line in wt:
        if line <= 11.5:
            WaterTemp = WaterTemp.replace(line, "LWT")
        elif line >= 22.5:
            WaterTemp = WaterTemp.replace(line, "HWT")
        else:
            WaterTemp = WaterTemp.replace(line, "")
1,
2,
3,
4,
5,
6,
LWT,
LWT,
LWT,
LWT,HWT
LWT,HWT
,
,
,
,
,
,HWT
,HWT
,HWT
,HWT
,HWT
HWT,HWT
HWT,HWT
HWT,HWT
HWT,HWT
HWT,HWT
HWT,HWT
HWT,HWT
29,HWT
30,HWT
31,HWT
32,HWT
33,HWT
34,HWT
35,HWT
36,HWT
37,HWT
38,HWT
39,HWT
40,HWT
我想替换WaterTemp的值,如下所示:

Date  WaterTemp
1       21.4
2       20.8
3       20.4
4       20.0
5       19.9
6       20.5
7       20.8
8       21.4
9       21.7
10       22.1
11       21.9
12       21.3
13       21.5
14       21.6
15       21.4
16       21.7
17       22.4
18       22.4
19       22.5
20       22.6
21       23.1
22       23.8
23       23.8
24       23.1
25       22.9
26       23.4
27       23.6
28       23.4
29       24.1
30       24.6
31       24.1
32       23.9
33       23.6
34       23.3
35       23.2
36       23.4
37       23.1
38       22.3
39       22.4
40       22.4
wt = df['WaterTemp']

for line in wt:
        if line <= 11.5:
            WaterTemp = WaterTemp.replace(line, "LWT")
        elif line >= 22.5:
            WaterTemp = WaterTemp.replace(line, "HWT")
        else:
            WaterTemp = WaterTemp.replace(line, "")
1,
2,
3,
4,
5,
6,
LWT,
LWT,
LWT,
LWT,HWT
LWT,HWT
,
,
,
,
,
,HWT
,HWT
,HWT
,HWT
,HWT
HWT,HWT
HWT,HWT
HWT,HWT
HWT,HWT
HWT,HWT
HWT,HWT
HWT,HWT
29,HWT
30,HWT
31,HWT
32,HWT
33,HWT
34,HWT
35,HWT
36,HWT
37,HWT
38,HWT
39,HWT
40,HWT
因此,它将日期值从7更改为28


我希望你能尽快帮助我。

这有点棘手,因为通常我会建议对
loc
使用几个语句,但一旦你将一些行设置为
str
,就会引入混合的数据类型,并且你无法将
str
float
进行比较。无论如何,您可以使用嵌套的
np实现这一点。其中
语句:

In [61]:
df['WaterTemp'] = np.where(df['WaterTemp'] <= 11.5, 'LWT', np.where(df['WaterTemp'] >= 22.5, 'HWT', ''))
df

Out[61]:
    Date WaterTemp
0      1          
1      2          
2      3          
3      4          
4      5          
5      6          
6      7          
7      8          
8      9          
9     10          
10    11          
11    12          
12    13          
13    14          
14    15          
15    16          
16    17          
17    18          
18    19       HWT
19    20       HWT
20    21       HWT
21    22       HWT
22    23       HWT
23    24       HWT
24    25       HWT
25    26       HWT
26    27       HWT
27    28       HWT
28    29       HWT
29    30       HWT
30    31       HWT
31    32       HWT
32    33       HWT
33    34       HWT
34    35       HWT
35    36       HWT
36    37       HWT
37    38          
38    39          
39    40        
[61]中的

df['WaterTemp']=np.其中(df['WaterTemp']=22.5,'HWT','')
df
出[61]:
日期水温
0      1          
1      2          
2      3          
3      4          
4      5          
5      6          
6      7          
7      8          
8      9          
9     10          
10    11          
11    12          
12    13          
13    14          
14    15          
15    16          
16    17          
17    18          
18 19 HWT
19 20 HWT
20 21 HWT
21 22 HWT
22 23 HWT
23小时24小时
24小时25分
2526HWT
26 27 HWT
27 28 HWT
28 29 HWT
29 30 HWT
30 31 HWT
31 32 HWT
32 33 HWT
33 34 HWT
34 35 HWT
35 36 HWT
36 37 HWT
37    38          
38    39          
39    40        

我会使用
pd.cut

df.WaterTemp = pd.cut(df.WaterTemp,
                      [0, 11.5, 22.5, 100],
                      labels=['LWT', '', 'HWT'])


如果要添加包含数据点的新列,可以使用:

import pandas as pd

df = pd.read_csv(r"C:\Users\ReddyAl\Documents\water temp.txt", sep=' ')

df['WaterTempClassification'] = 'Normal'
df.loc[df['WaterTemp'] <=11.2, 'WaterTempClassification'] = 'LWT'
df.loc[df['WaterTemp'] >=22.5, 'WaterTempClassification'] = 'HWT'

是的,我遇到了无序类型str>float的问题。但你的回答奏效了。非常感谢。使用
np。where
像我的答案一样应该有效,因为我已经证明了,Nyes也会有效。已经用另一个解决方案做了,但也谢谢你。实际上,EdChum的更正确。我错过了
Date==19的匹配项
OP没有要求新列,他们想要覆盖现有列