我们有以下数据框,我们是从CSV文件创建的。
data = pd.read_csv(path + name, usecols = ['QTS','DSTP','RSTP','DDATE','RDATE','DTIME','RTIME','DCXR','RCXR','FARE']
)
我想从数据框中删除特定的行。为此,我使用了一个列表并附加了我们要删除的行的ID。
for index,row in data.iterrows():
if (row['FARE'] >= 2500.00):
indices.append(index)
从这里我迷失了。不知道如何使用列表中的ID来删除数据框中的行
data.drop(index,inplace=True)
,因为它确实会减慢过程答案 0 :(得分:3)
如果您尝试删除'FARE'
值大于或等于零的行,则可以使用具有小于2500
的值的掩码 -
df_out = df.loc[df.FARE.values < 2500] # Or df[df.FARE.values < 2500]
对于大型数据集,我们可能希望使用底层数组数据,然后构造输出数据框 -
df_out = pd.DataFrame(df.values[df.FARE.values < 2500], columns=df.columns)
使用问题中循环代码生成的indices
-
df_out = df.loc[np.setdiff1d(df.index, indices)]
或再次使用masking
-
df_out = df.loc[~df.index.isin(indices)] # or df[~df.index.isin(indices)]
答案 1 :(得分:0)
如何使用DataFrame.query()方法过滤数据:
cols = ['QTS','DSTP','RSTP','DDATE','RDATE','DTIME','RTIME','DCXR','RCXR','FARE']
df = pd.read_csv(path + name, usecols=cols).query("FARE < 2500")