2015-12-22 51 views
0

我试图通过一个熊猫DataFrame循环,直到列是空白或不包含术语'股票'。如果它包含日期,我希望打印“检查”一词。循环遍历栏直到空白

我使用:

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 ("") 
+1

'Stock'是列的名称,而不是列中的值。你能否正确解释你想达到的目标? –

+0

我想遍历列的名称 - “股票”和列出的日期。如果列中的日期有数字值,我希望循环打印'检查'。然后我希望循环在日期结束时打破列表。 – beng986

回答

1

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

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

然后我不确定您是在循环正确的方式还是以正确的方式使用column。通过使用column += 1继续下一步是否正确?我不认识熊猫,但看起来很奇怪。同时将它与字符串进行比较可能不正确。

0

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

不管怎么说,让我改,你在找什么,以确保我猜中了:你要遍历您df的列,每列其名是一个日期,你做print('Check'),否则什么也不会发生。请让我们知道这是否是错误的。

为了达到这个目的,这里有一个可能的方法。您可以迭代列名称并尝试将字符串转换为日期,例如使用pd.to_datetime。如果成功,它会打印一条消息。

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 

可以看到,当列名,至少强制转换成日期Check仅打印。