я хочу отфильтровать данные с &, но получил неправильный результат - PullRequest
0 голосов
/ 17 октября 2018

Вот мой фрейм данных. Я хочу, чтобы значение удовлетворяло busSpeed<3 и sationUuid==1 в одно и то же время, чтобы быть NAN, но я получил неправильный результат, кто-нибудь поможет, спасибо

ниже моекод

import pandas as pd
import numpy as np
df=pd.read_excel('d:gps/9-20-32-36574.xlsx')
df.sationUuid.fillna(method='bfill',inplace=True)
df.dropna(subset=['sationUuid'],inplace=True)
df1=list()
for i in range(len(df)):
    if((df.sationUuid[i]==1)&(df.busSpeed[i]<3)):
        df1.append(df.replace(df.busSpeed[i],np.NAN))

это данные до обработки

original data

это результат, который я получил


result

sationuuid больше 1 также было установлено в nan, if утверждение, кажется, только делает busSpeed<3, как это произошло

1 Ответ

0 голосов
/ 17 октября 2018

Вы можете сделать это с помощью запросов панд, а не с помощью цикла и блока if.Использование запросов Pandas имеет дополнительное преимущество, заключающееся в том, что он намного эффективнее, чем использование цикла.Чтобы заменить значения, удовлетворяющие вашему условию, вы можете использовать присваивание с .loc.

. Вот пример:

import pandas as pd
import numpy as np

df = pd.read_excel('d:gps/9-20-32-36574.xlsx')
df.sationUuid.fillna(method='bfill',inplace=True)
df.dropna(subset=['stationUuid'],inplace=True)

mask = (df.stationUuid == 1) & (df.busSpeed < 3)
df.loc[mask, 'busSpeed'] = np.nan

Так что, если df выглядит следующим образом после чтения из Excel:

stationUuid  busSpeed
1            1.5
2            1
1            100
3            10

Тогда df будет выглядеть следующим образом после остальной части сценария:

stationUuid  busSpeed
1            NaN
2            1
1            100
3            10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...