我正在尝试遍历熊猫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 ("")
答案 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
仅在列名称至少可强制转换为日期时才会打印。