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没有要求新列,他们想要覆盖现有列