循环通过列直到空白

时间:2015-12-22 10:51:09

标签: python loops

我正在尝试遍历熊猫DataFrame,直到列为空或者不包含术语' Stock'。如果它包含日期,我想要单词'检查'打印。

我正在使用:

print(df)
    Stock  15/12/2015  15/11/2015  15/10/2015
0    AA          10          11          11
1    BB          20          10           8
2    CC          30          33          26
3    DD          40          80          60

我试过以下(这是错误的):

column = df
    while column != ("") or 'Stock':   
print ('Check'),
column += 1

print ("")

2 个答案:

答案 0 :(得分:1)

您的代码中存在一些问题。首先,你搞砸了缩进,所以它甚至都不是有效的代码。

第二,你的比较被打破了,因为它并不意味着你可能期望的。 column != ("") or 'Stock'始终为真,因为这意味着首先它会将column("")进行比较,如果相等,则表达式为True,否则将评估'Stock'并使表达式的值(以及在布尔上下文中被认为是真的)。你可能应该写的是column != "" and column != "Stock"column not in ("", "Stock")

然后我不确定你是以正确的方式循环还是以正确的方式使用column。使用column += 1步骤到下一步是否正确?我不知道熊猫,但看起来很奇怪。将它与字符串进行比较可能不正确。

答案 1 :(得分:0)

您的代码确实需要改进。你应该遵循@skyking建议。我想补充一点,您可能想要转置数据框,并将日期作为变量。

无论如何,让我改写一下你要找的东西,确保我做对了:你想要迭代df的列,对于每个名称是日期的列,你做{{ 1}},否则没有任何反应。如果这是错误的,请告诉我们。

为实现这一目标,这是一种可行的方法。您可以迭代列名称并尝试将字符串转换为日期,例如,使用pd.to_datetime。如果成功,则会打印一条消息。

print('Check')

此输出

for name in df.columns:
    print(name)  # comment this line after testing
    try:
        pd.to_datetime(name)
    except ValueError:
        pass  # or do something in case the column name is not a date
    else:
        print('Check')

您可以看到Stock 15/12/2015 Check 15/11/2015 Check 15/10/2015 Check 仅在列名称至少可强制转换为日期时才会打印。