Python Pandas: DataFrame 过滤负值
我在想,怎么才能把所有包含负值的索引都去掉呢?我在用Pandas的DataFrames
。
格式如下:
Myid - valuecol1 - valuecol2 - valuecol3 -... valuecol30
我的DataFrame
叫data
我知道怎么处理一列的数据:
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]