修改datafram中的值

2024-04-18 03:43:58 发布

您现在位置:Python中文网/ 问答频道 /正文

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

     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
…

我已经编写了下面的循环来遍历数据帧并改变windspeed列。当风速大于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]

正如您在上面的dataframe中所看到的,这个循环在第一行数据上起作用,但在第一行数据之后不会继续。我没有收到任何错误消息,它为什么会在第一行之后停止。你知道吗


Tags: 数据dftimetempatpressrhcloudy
3条回答

使用apply

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

def modify(x):
       if x=='Calm' :
                    y=1;
       else: 
                    y=re.findall('[0-9]+',x)

       return y

添加另一种方法:

import numpy as np

df['WindSpeed'] = np.where(df['WindSpeed'] == 'Calm', '1', df['WindSpeed'].str.extract('(\d+)'))

相关问题 更多 >