【发布时间】:2020-12-31 13:54:04
【问题描述】:
我的df 看起来像这样:
| URN | col1 | col2 | col3 | TEMPPNUM |
|---|---|---|---|---|
| 100279 | 24.0 | 75.8 | 0.1 | 99.9 |
| 100055 | 52.2 | 47.8 | 0.0 | 100.0 |
| 107782 | 12.3 | 86.2 | 1.5 | 100.0 |
| 112956 | 12.3 | 86.2 | 1.5 | 100.0 |
| 139957 | 19.9 | 79.9 | 0.2 | 100.0 |
TEMPPNUM 列是这样创建的:
df['TEMPPNUM'] = ((df['col1'] + df['col2'] + df['col3']))
我想过滤掉所有 TEMPPNUM 列不等于 100 的行。
df = df.loc[(df['TEMPPNUM'] == 100)]
但是,当我这样做时,过滤掉的值比我预期的要多。有什么原因吗? (我的数据框比示例大得多)。
它会过滤掉所有不等于 100 的值,但也会过滤掉很多 TEMPPNUM 确实等于 100 的行。
【问题讨论】:
-
您能否向我们展示一个工作示例,其中 rows =
100也已被过滤?一个原因可能是,100的一些值可能是object和少数int/float。所以str值被过滤掉了。 -
@MayankPorwal 有一个观点。如果您的数据不一致,您可能会使用该方法得到这些意想不到的结果。比较时尝试使用
astype-df['TEMPPNUM'].astype(int) == 100 -
这是我的想法之一,但我仍然发现没有删除的单元格,我也尝试了您建议的方法,但仍然无济于事。我仍然可以看到
['TEMPPNUM']等于 100 的多行被过滤掉。我使用了df['TEMPPNUM'] = pd.to_numeric(df['TEMPPNUM'])来确保该行使用正确的类型 -
我认为我们需要一些来自失败的样本数据。显示一些样本,其中 100 显示如下:
df.head(5),df.info()其中 DF 表示“过滤”表。希望这是有道理的 -
pasteboard.co/JHtSr0S.png 我已经截取了我所看到的内容。您可以立即看到 URN: 100049 已在不应该被删除时被删除
标签: python pandas dataframe filter