在python pandas中删除行

时间:2015-10-13 22:08:40

标签: python pandas

我有以下DataFrame

      2010-01-03  2010-01-04  2010-01-05  2010-01-06  2010-01-07
1560    0.002624    0.004992   -0.011085   -0.007508   -0.007508
14      0.000000   -0.000978   -0.016960   -0.016960   -0.009106
2920    0.000000    0.018150    0.018150    0.002648    0.025379
1502    0.000000    0.018150    0.011648    0.005963    0.005963
78      0.000000    0.018150    0.014873    0.014873    0.007564

我有与我要从DataFrame中删除的行对应的索引列表。为简单起见,假设我的列表是idx_to_drop = [1560,1502],它对应于上面daraframe中的第1行和第4行。

我尝试运行df2 = df.drop(df.index[idx_to_drop]),但这需要行号而不是.ix()索引值。我有更多行和更多列,使用where()函数获取行号需要一段时间。

如何删除.ix()匹配的行?

1 个答案:

答案 0 :(得分:4)

我会通过将问题分成两部分来解决这个问题。掩盖你要找的东西,然后再选择反面。

简短回答:

let

使用isin

对runnable示例进行说明
df[~df.index.isin([1560, 1502])]

你可以看到我们已经确定了两个坏行,然后我们想要选择所有不是坏行的行。我们的掩码是否为坏行,而所有其他行都是不是掩码的任何行(import pandas as pd df = pd.DataFrame({'index': [1, 2, 3, 1500, 1501], 'vals': [1, 2, 3, 4, 5]}).set_index('index') bad_rows = [1500, 1501] mask = df.index.isin(bad_rows) print mask [False False False True True] df[mask] vals index 1500 4 1501 5 print ~mask [ True True True False False] df[~mask] vals index 1 1 2 2 3 3