如何使用索引列表

时间:2017-05-29 13:48:36

标签: python pandas

简介

我们有以下数据框,我们是从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来删除数据框中的行

问题

  • 必须在数据框中使用包含行ID的列表来删除行。是否可以这样做?

约束

  • 我们无法使用data.drop(index,inplace=True),因为它确实会减慢过程
  • 我们无法使用过滤器,因为我有一些特殊限制。

2 个答案:

答案 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")