Python Pandas: DataFrame 过滤负值

20 投票
5 回答
137084 浏览
提问于 2025-04-18 09:44

我在想,怎么才能把所有包含负值的索引都去掉呢?我在用Pandas的DataFrames

Pandas DataFrame文档

格式如下:

Myid - valuecol1 - valuecol2 - valuecol3 -... valuecol30

我的DataFramedata

我知道怎么处理一列的数据:

data2 = data.index[data['valuecol1'] > 0]
data3 = data.ix[data3]

这样我就只得到了valuecol1 > 0的那些id,那我该怎么写一个类似and的语句呢?

valuecol1 && valuecol2 && valuecol3 && ... && valuecol30 > 0可以这样写吗?

5 个回答

0

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,尤其是当我们刚开始学习编程的时候。比如,有人可能会在使用某个函数时,发现它的表现和预期不一样。这时候,我们就需要仔细检查代码,看看是不是哪里出错了。

有些时候,问题可能出在我们对这个函数的理解上。比如,我们可能没有完全明白这个函数的参数应该怎么用,或者它的返回值是什么样的。为了帮助自己解决这些问题,我们可以查阅相关的文档,或者在网上寻找其他人的经验和解决方案。

总之,编程是一门需要不断学习和实践的技能,遇到问题是很正常的。只要我们保持耐心,认真分析,就一定能找到解决办法。

import pandas as pd
df = pd.read_csv('Dataset/data.csv')
df_new = df[(df['Quantity'] < 0)]
df_new
df_new['Quantity1'] = df.Quantity
df_new.shape
2

如果你想查看一组相邻的列的值,比如从第二列到第十列:

df[(df.ix[:,2:10] > 0).all(1)]

你也可以使用一个范围

df[(df.ix[:,range(1,10,3)] > 0).all(1)]

以及自己定义的索引列表

mylist=[1,2,4,8]
df[(df.ix[:, mylist] > 0).all(1)]
6

在数据框中使用“与”条件时,只需要用一个 & 符号,并且每个条件要用括号括起来。

比如说:

data = data[(data['col1']>0) & (data['valuecol2']>0) & (data['valuecol3']>0)]
45

你可以用 all 来检查整行或整列的值是否都是 True(真):

In [11]: df = pd.DataFrame(np.random.randn(10, 3))

In [12]: df
Out[12]:
          0         1         2
0 -1.003735  0.792479  0.787538
1 -2.056750 -1.508980  0.676378
2  1.355528  0.307063  0.369505
3  1.201093  0.994041 -1.169323
4 -0.305359  0.044360 -0.085346
5 -0.684149 -0.482129 -0.598155
6  1.795011  1.231198 -0.465683
7 -0.632216 -0.075575  0.812735
8 -0.479523 -1.900072 -0.966430
9 -1.441645 -1.189408  1.338681

In [13]: (df > 0).all(1)
Out[13]:
0    False
1    False
2     True
3    False
4    False
5    False
6    False
7    False
8    False
9    False
dtype: bool

In [14]: df[(df > 0).all(1)]
Out[14]:
          0         1         2
2  1.355528  0.307063  0.369505

如果你只想查看某些特定的列,比如 [0, 1] 这两列:

In [15]: df[(df[[0, 1]] > 0).all(1)]
Out[15]:
          0         1         2
2  1.355528  0.307063  0.369505
3  1.201093  0.994041 -1.169323
6  1.795011  1.231198 -0.465683
10

你可以遍历一下列的名称

for cols in data.columns.tolist()[1:]:
    data = data.ix[data[cols] > 0]

撰写回答