这是我的数据框,我想同时将满足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
大于1的值也被设置为nan,if
语句似乎只busSpeed<3
起作用,这是怎么发生的
答案 0 :(得分:1)
您可以通过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
因此,从Excel中读取后,如果df
如下所示:
stationUuid busSpeed
1 1.5
2 1
1 100
3 10
然后df
在脚本的其余部分之后将如下所示:
stationUuid busSpeed
1 NaN
2 1
1 100
3 10