2015-12-22 45 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僅打印。