为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

子衿沉夜 2021-11-23 19:41:19
您好,我正在尝试删除不等于1或0跨多个列但不包括某些列的值这就是我开始的df=pd.read_csv('df.csv')df.head()     Age  Prod1  Prod2  Day 4  Day 5 ...  Region0    18     1      0      1.0    5.0  0     11    89     3      1      1.0    1.0  1     12    100    4      7      0.0    1.0  1     03    200    0      1      0.0    0.0  1     04    300    1      1      0.0    1.0  1     15    19     1      1      1.0    1.0  6     1总共有 10,000 行和 34 列我已成功清理的前两列,因为它们的数值与其他列不同。这是我所做的ageindex = df[ (df['Age'] < 18) & (dfl['Age'] > 150) ].indexdf.drop(ageindex)我想从列Prod1到末尾删除行Region。它只有 34 列,但我似乎无法弄清楚如何做到这一点。我找到了一种在这里删除 NaN 值的方法,但没有找到如何使用基于值的条件删除。这是我尝试过的prodindex1 = df[ (df.loc['Prod1':'Region'] > 1) ].indexdf.drop(prodindex1)但这只是返回相同的数据帧。我也试过prodindex = df[ (df.loc['Prod1':'Region'] > 1) & (df.loc['Prod1':'Region'] < 0) ].indexdf.drop(prodindex)预期输出应该是     Age  Prod1  Prod2  Day 4  Day 5 ...  Region3    200    0      1      0.0    0.0  1     04    300    1      1      0.0    1.0  1     1我想我有一些问题,因为其中一些是整数,一些是浮点数。任何指导表示赞赏。编辑:我想删除值不等于或不等于 0 的地方
查看完整描述

3 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

import pandas as pd 

import numpy as np 


# Sample data

d = np.array([[18, 1, 0, 1.0, 5.0, 0, 1],

                [89, 3, 1, 1.0, 1.0, 1, 1],

                [100, 4, 7, 0.0, 1.0, 1, 0],

                [200, 0, 1, 0.0, 0.0, 1, 0],

                [300, 1, 1, 0.0, 1.0, 1, 1],

                [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)    

print(df)

应该给出预期的输出:


     Age  Prod1  Prod2  Day 4  Day 5  Day 6  Region

3  200.0    0.0    1.0    0.0    0.0    1.0     0.0

4  300.0    1.0    1.0    0.0    1.0    1.0     1.0


评论您的代码: 您的条件错误,但这不是您获得相同数据帧的原因。发生这种情况是因为您没有传递df.drop(prodindex)给变量,即:


# Your code

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

df = df.drop(prodindex)

print(df) 


Empty DataFrame

Columns: [Age, Prod1, Prod2, Day 4, Day 5, Day 6, Region]

Index: []


查看完整回答
反对 回复 2021-11-23
?
守着一只汪

TA贡献1872条经验 获得超3个赞

如果您希望删除包含值 1 或 0 的行,请执行以下操作:

df.loc[~df.loc[:, 'Prod1':'Region'].isin([0, 1]).any(axis=1), :]


查看完整回答
反对 回复 2021-11-23
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

这应该有效:

df[df.loc[:, 'Prod1':'Region'].isin([0, 1]).all(axis=1)]


查看完整回答
反对 回复 2021-11-23
  • 3 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信