我正在尝试遍历数据帧的行,并在进行迭代时修改一些值。数据框如下所示:
#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
…
如您在上面的数据框中看到的那样,此循环已在数据的第一行中起作用,但不会继续下去。关于为什么它在第一行之后停止的原因,我没有收到任何错误消息。
答案 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