我想用 & 过滤数据,但得到了错误的结果
i want to filter data with &,but got a wrong result
这是我的dataframe,我想设置值同时满足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))
这是处理前的数据
这是我得到的结果
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
这是我的dataframe,我想设置值同时满足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))
这是处理前的数据
这是我得到的结果
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