在混合数据类型数据框中删除列子集中的行

您好,我正在尝试删除不等于1或0跨多个列但不包括某些列的值


这就是我开始的


df=pd.read_csv('df.csv')

df.head()

     Age  Prod1  Prod2  Day 4  Day 5 ...  Region

0    18     1      0      1.0    5.0  0     1

1    89     3      1      1.0    1.0  1     1

2    100    4      7      0.0    1.0  1     0

3    200    0      1      0.0    0.0  1     0

4    300    1      1      0.0    1.0  1     1

5    19     1      1      1.0    1.0  6     1

总共有 10,000 行和 34 列


我已成功清理的前两列,因为它们的数值与其他列不同。


这是我所做的


ageindex = df[ (df['Age'] < 18) & (dfl['Age'] > 150) ].index

df.drop(ageindex)

我想从列Prod1到末尾删除行Region。它只有 34 列,但我似乎无法弄清楚如何做到这一点。


我找到了一种在这里删除 NaN 值的方法,但没有找到如何使用基于值的条件删除。


这是我尝试过的


prodindex1 = df[ (df.loc['Prod1':'Region'] > 1) ].index

df.drop(prodindex1)

但这只是返回相同的数据帧。我也试过


prodindex = df[ (df.loc['Prod1':'Region'] > 1) & (df.loc['Prod1':'Region'] < 0) ].index

df.drop(prodindex)

预期输出应该是


     Age  Prod1  Prod2  Day 4  Day 5 ...  Region

3    200    0      1      0.0    0.0  1     0

4    300    1      1      0.0    1.0  1     1

我想我有一些问题,因为其中一些是整数,一些是浮点数。任何指导表示赞赏。


编辑:我想删除值不等于或不等于 0 的地方


子衿沉夜
浏览 188回答 3
3回答

湖上湖

import pandas as pd&nbsp;import numpy as np&nbsp;# Sample datad = np.array([[18, 1, 0, 1.0, 5.0, 0, 1],&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [89, 3, 1, 1.0, 1.0, 1, 1],&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [100, 4, 7, 0.0, 1.0, 1, 0],&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [200, 0, 1, 0.0, 0.0, 1, 0],&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [300, 1, 1, 0.0, 1.0, 1, 1],&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [19, 1, 1, 1.0, 1.0, 6, 1]])df = pd.DataFrame(data=d, columns = ['Age','Prod1','Prod2', 'Day 4', 'Day 5', 'Day 6', 'Region'])df = df.drop(df[~df.loc[:, 'Prod1':'Region'].isin([0, 1]).all(axis=1)].index)&nbsp; &nbsp;&nbsp;print(df)应该给出预期的输出:&nbsp; &nbsp; &nbsp;Age&nbsp; Prod1&nbsp; Prod2&nbsp; Day 4&nbsp; Day 5&nbsp; Day 6&nbsp; Region3&nbsp; 200.0&nbsp; &nbsp; 0.0&nbsp; &nbsp; 1.0&nbsp; &nbsp; 0.0&nbsp; &nbsp; 0.0&nbsp; &nbsp; 1.0&nbsp; &nbsp; &nbsp;0.04&nbsp; 300.0&nbsp; &nbsp; 1.0&nbsp; &nbsp; 1.0&nbsp; &nbsp; 0.0&nbsp; &nbsp; 1.0&nbsp; &nbsp; 1.0&nbsp; &nbsp; &nbsp;1.0评论您的代码: 您的条件错误,但这不是您获得相同数据帧的原因。发生这种情况是因为您没有传递df.drop(prodindex)给变量,即:# Your codeprodindex = df[ (df.loc['Prod1':'Region'] > 1) & (df.loc['Prod1':'Region'] < 0) ].indexdf = df.drop(prodindex)print(df)&nbsp;Empty DataFrameColumns: [Age, Prod1, Prod2, Day 4, Day 5, Day 6, Region]Index: []

守着一只汪

如果您希望删除包含值 1 或 0 的行,请执行以下操作:df.loc[~df.loc[:, 'Prod1':'Region'].isin([0, 1]).any(axis=1), :]

陪伴而非守候

这应该有效:df[df.loc[:,&nbsp;'Prod1':'Region'].isin([0,&nbsp;1]).all(axis=1)]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python