首页 > 解决方案 > 修改数据框中的值

问题描述

我正在尝试遍历数据框的行并在迭代时修改一些值。数据框如下所示:

     Time WindSpeed        SkyCover   Temp  DewPt   RH   Press  Precip
3   21:53      11       Light Snow   -1.7   -6.1  72%  1003.1       0
4   20:53    N 11    Mostly Cloudy   -2.2   -6.1  75%  1002.8       0
5   19:53    Calm    Mostly Cloudy   -2.8   -6.7  75%  1002.7       0
6   18:53    Calm         Overcast   -1.7   -6.7  69%  1002.4       0
7   17:53     N 5         Overcast   -1.7   -7.2  66%  1002.6       0
8   16:53    NE 8         Overcast   -1.1   -7.2  64%  1002.5       0
…

我编写了以下循环来遍历数据框并更改风速列。当风速大于 1 KPH 时,此列是一个向量,当低于该阈值时,此列是一个文本值“Calm”。我希望这个循环逐行查看列值,如果它很平静,请将“1”放在它的位置,但如果它大于 1,则删除方向并仅保留标量值。

for i in df.index:
    if df.at[i, 2] == 'Calm': 
        df.at[i, 2] = 1
    else:
        df.at[i, 2] = re.findall('[0-9]+', df.at[i, 2])[0]

正如您在上面的数据框中看到的那样,此循环已对第一行数据起作用,但不会继续超过该数据。我没有收到任何关于它为什么在第一行之后停止的错误消息。

标签: pythonpandasdataframe

解决方案


使用apply

df.WindSpeed = df.WindSpeed.apply(lambda x: 1 if x == 'Calm' else re.findall(r'[0-9]+',x)[0])

推荐阅读