我想用 & 过滤数据,但得到了错误的结果

i want to filter data with &,but got a wrong result

这是我的dataframe,我想设置值同时满足busSpeed<3sationUuid==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))

这是处理前的数据

这是我得到的结果


sationuuid great than 1 was also set to nan,if statement seems only do busSpeed<3,怎么会这样

您可以使用 Pandas 查询而不是循环和 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