在过滤数据帧的值时返回相同的初始输入

时间:2017-05-15 10:43:30

标签: pandas

我从read_html pandas的属性中获得了以下数据帧。

Competition.Title

我想删除超过150的行,所以我做了A        1.48        2.64    1.02         2.46   2.73 B       658.4        14.33    7.41        15.35   8.59 C        3.76         2.07    4.61         2.26   2.05 D   513854.86         5.70    0.00         5.35  30.16 ,但它返回了同一个表。

然后我想在路由df1= df[df > 150]中包含小数并继续返回相同的初始数据帧而不使用过滤器。

这将是我想要的输出:

route = pd.read_html(https//route , decimal='.')

1 个答案:

答案 0 :(得分:1)

需要:

print (df)
   0          1      2     3      4      5
0  A       1.48   2.64  1.02   2.46   2.73
1  B     658.40  14.33  7.41  15.35   8.59
2  C       3.76   2.07  4.61   2.26   2.05
3  D  513854.86   5.70  0.00   5.35  30.16

df1 = df[~(df.iloc[:, 1:] > 150).any(1)]
print (df1)
   0     1     2     3     4     5
0  A  1.48  2.64  1.02  2.46  2.73
2  C  3.76  2.07  4.61  2.26  2.05

或者:

df1 = df[(df.iloc[:, 1:] <= 150).all(1)]
print (df1)
   0     1     2     3     4     5
0  A  1.48  2.64  1.02  2.46  2.73
2  C  3.76  2.07  4.61  2.26  2.05

说明:

首先选择所有列,而不是先iloc

print (df.iloc[:, 1:])
           1      2     3      4      5
0       1.48   2.64  1.02   2.46   2.73
1     658.40  14.33  7.41  15.35   8.59
2       3.76   2.07  4.61   2.26   2.05
3  513854.86   5.70  0.00   5.35  30.16

然后比较 - 得到布尔数据框:

print (df.iloc[:, 1:] > 150)
       1      2      3      4      5
0  False  False  False  False  False
1   True  False  False  False  False
2  False  False  False  False  False
3   True  False  False  False  False

print (df.iloc[:, 1:] <= 150)
       1     2     3     4     5
0   True  True  True  True  True
1  False  True  True  True  True
2   True  True  True  True  True
3  False  True  True  True  True

然后使用all检查行中的所有值是否都有True s 或any检查至少有一个值是True

print ((df.iloc[:, 1:] > 150).any(1))
0    False
1     True
2    False
3     True
dtype: bool

print ((df.iloc[:, 1:] <= 150).all(1))
0     True
1    False
2     True
3    False
dtype: bool

上一个Series转换为~并按boolean indexing过滤。