修改数据框中的值

时间:2018-12-27 07:13:42

标签: python pandas dataframe

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

#include <JlCompress.h>


int main(int argc, char * argv[])
{
   JlCompress::compressFile("C:/test.zip", "C:/test.txt");
   JlCompress::extractDir("C:/test.zip", "C:/");
   return 0;
}

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

     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
…

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

3 个答案:

答案 0 :(得分:3)

使用apply

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

答案 1 :(得分:1)

添加另一种方式:

import numpy as np

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

答案 2 :(得分:0)

df['WindSpeed']=df['WindSpeed'].apply(modify)

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

       return y