【问题标题】:conditionally dropping rows from a pandas dataframe有条件地从熊猫数据框中删除行
【发布时间】:2020-07-18 06:29:58
【问题描述】:

我正在尝试有条件地从熊猫数据框中删除行并遇到麻烦。例如,我想在下面的示例中从数据框中删除第二行和第三行。

import pandas as pd

df = pd.DataFrame([
    [12, 10, 7, 0],
    [11, 0, 0, 3],
    [0, 0, 0, 0],
    [0, 6, 7, 5],
    [4, 11, 3,4],
    [5, 2, 5, 0]],
    columns=["num1", "num2","num3","num3"])

我试过了:

df.loc[~(df['num2','num3']==0).all(axis=1)]

但报错“TypeError: only integer scalar arrays can be convert to a scalar index”

我也按照下面的建议尝试了这个并得到了意外的输出:

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    试试

    df.loc[(df['num2']!=0) & (df['num2']!=0)]
    

    【讨论】:

    • 当我尝试这样做时,我收到以下错误:'
    【解决方案2】:

    使用neall 作为:

    df = df.loc[df[['num2','num3']].ne(0).all(axis=1)]
    print(df)
       num1  num2  num3  num4
    0    12    10     7     0
    3     0     6     7     5
    4     4    11     3     4
    5     5     2     5     0
    

    这是我的执行截图:

    【讨论】:

    • 看起来应该可以,但是当我运行该代码时,我只得到标记为 3 和 4 的行。` num1 num2 num3 num4 3 0 6 7 5 4 4 11 3 4`跨度>
    • @jmark7453 不可以,能再查一下吗?
    • 尝试重置所有内容,但仍然得到该输出。 (我似乎无法附上代码输入/输出的图像,但这就是我得到的)
    • @jmark7453 您不希望包含 num2num3 的行都等于 0。或者您只想过滤第 1 行和第 2 行。还要检查它们的列的数据类型应该是 int。
    • 是的。我想要你得到的输出,数据类型是 int。如果重要的话,我正在运行 python 3.7.6
    猜你喜欢
    • 1970-01-01
    • 2018-02-05
    • 2018-11-09
    • 2019-02-26
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    相关资源
    最近更新 更多