【问题标题】:Dropping rows in python pandas在 python pandas 中删除行
【发布时间】:2015-10-13 22:08:39
【问题描述】:

我有以下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 中的第一行和第四行。

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

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

【问题讨论】:

  • df[~df.index.isin([1560, 1502])] 这对你有用吗?
  • @BrianPendleton:没有
  • @BrianPendleton:哦-是的。完美的。谢谢!想要将其发布为答案,以便我将其标记为正确?

标签: python pandas


【解决方案1】:

我会通过将问题分成两部分来解决这个问题。屏蔽您要查找的内容,然后再选择反面。

简答:

df[~df.index.isin([1560, 1502])]

使用可运行示例进行说明,使用isin

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

您可以看到我们已经确定了两个坏行,然后我们想要选择所有不是坏行的行。如果是坏行,我们的掩码,所有其他行都不是掩码 (~mask)

【讨论】:

  • 您能否通过解释、api 链接等来充实您的答案。仅代码的答案不受欢迎,谢谢。
  • @EdChum 添加了更多详细信息和指向 isin/布尔索引的链接。谢谢
猜你喜欢
  • 1970-01-01
  • 2018-08-03
  • 2020-09-29
  • 1970-01-01
  • 2017-07-07
  • 2021-11-22
  • 2014-02-28
  • 2017-12-22
  • 1970-01-01
相关资源
最近更新 更多