Изменение значений в кадре данных - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь перебрать строки в фрейме данных и изменить некоторые значения при переборе.Фрейм данных выглядит следующим образом:

     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 км / ч, и текстовое значение «Успокоить», когда значение ниже этого порога.Я хочу, чтобы этот цикл просматривал значения столбца строка за строкой, и если он спокоен, поставьте «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]

Как вы можете видеть на приведенном выше кадре данных, этот цикл работал с первой строкой данных, но не продолжается после этого.Я не получаю никаких сообщений об ошибках, почему он останавливается после первой строки.

Ответы [ 3 ]

0 голосов
/ 27 декабря 2018
df['WindSpeed']=df['WindSpeed'].apply(modify)

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

       return y
0 голосов
/ 27 декабря 2018

Добавление еще одного способа сделать это:

import numpy as np

df['WindSpeed'] = np.where(df['WindSpeed'] == 'Calm', '1', df['WindSpeed'].str.extract('(\d+)'))
0 голосов
/ 27 декабря 2018

Использование apply:

df.WindSpeed = df.WindSpeed.apply(lambda x: 1 if x == 'Calm' else re.findall(r'[0-9]+',x)[0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...