迭代列并检查条件

时间:2015-07-26 18:40:55

标签: python pandas

我想选择符合特定条件的列,并将它们添加到生成的DataFrame

import pandas as pd

df = pd.read_csv('outputData.csv')

for col in df.columns:
    for index in col: #how can I do this?
        if(index > 0) #... check some conditions

那么如何迭代列的索引呢?或者通常有更好的方法吗?

修改

要读取的DataFrame如下所示:

col1 col2 col3 ....
1  1  4 ...
2  1  2 ...
1  0  0 ...

所以我基本上想要的是提取包含最高值包含的列并尽可能少地包含零。在这种情况下,第1列和第3列优于第2列。尚不确定,我将如何权衡这一点。

3 个答案:

答案 0 :(得分:1)

您可以使用enumerate()

for index, col in enumerate(df.columns):
    if index > 0:

答案 1 :(得分:1)

不确定这个问题是否正确。当你说"列"如果您只想要包含在该列中的数据,或者您是否希望根据特定列的值填充标准的行,则不满足某些条件。

以下是我存储棒球运动员信息的数据框样本。我使用iPython,因此InOut是对iPython shell提示的引用。我使用.head(5)方法显示数据框中的前五行数据:



In [45]: lahman_data.head(5)
Out[45]: 
             name handedness  height  weight    avg   HR
0       Tom Brown          R      73     170  0.000    0
1  Denny Lemaster          R      73     182  0.130    4
2       Joe Nolan          L      71     175  0.263   27
3     Denny Doyle          L      69     175  0.250   16
4   Jose Cardenal          R      70     150  0.275  138




如果我想创建一个新的数据框,其中包含符合任何权重>的玩家标准的所有行。 160磅:



In [46]: weight_gt_160 = lahman_data[lahman_data['weight'] > 160]
In [46]: weight_gt_160.head(5)
Out[46]: 
             name handedness  height  weight    avg  HR
0       Tom Brown          R      73     170  0.000   0
1  Denny Lemaster          R      73     182  0.130   4
2       Joe Nolan          L      71     175  0.263  27
3     Denny Doyle          L      69     175  0.250  16
5       Mike Ryan          R      74     205  0.193  28




请注意,我仍然拥有每列的数据,但只有符合指定条件的列中的行才会出现在新数据框weight_gt_160中。

但是,如果你只想创建一个只有重量数据但又规定重量大于160的数据框:



In [48]: weight_only_gt_160 = lahman_data.weight[lahman_data['weight']> 160]
In [51]: weight_only_gt_160.head(5)
Out[51]: 
0    170
1    182
2    175
3    175
5    205
Name: weight, dtype: int64




我已经使用了将结果范围限定为“权重”所需的语法。专栏,没有别的。

您提出的问题"选择列"但实际上,您正在列中选择符合条件的数据值。 "选择列"听起来更像是在对#34;州"进行一般性陈述。一列,并试图制定逻辑来对该广义状态采取行动。

无论如何,希望这有帮助!

答案 2 :(得分:0)

使用enumerate()函数生成索引以及列名称:

import pandas as pd

df = pd.read_csv('outputData.csv')

for index, column in enumerate(df.columns):
    print index, column