你好,我试图在几列中删除不等于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的地方
答案 0 :(得分:1)
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: []
答案 1 :(得分:0)
这应该有效:
df[df.loc[:, 'Prod1':'Region'].isin([0, 1]).all(axis=1)]
答案 2 :(得分:0)
如果您希望删除包含值1或0的行,请执行以下操作:
df.loc[~df.loc[:, 'Prod1':'Region'].isin([0, 1]).any(axis=1), :]