首页 > 解决方案 > 为什么使用 str.format() 时会给出两个不同的结果?

问题描述

我正在尝试从 yahoo Finance 中提取最大收盘价及其相应日期,并在图表上注释该点。代码如下所示。

ymax = tencents[['Close']].max() 
ymax
#result: Close    474.600006
dtype: float64

texty= "y={:.3f}".format(ymax)
texty
#result: unsupported format string passed to Series.__format__
#expected: 474.60

xmax= tencents['Close'].idxmax()
#result: "x=.strftime('2018-01-23)"
textx= "x={:.strftime('%Y-%m-%d)}".format(xpos)
textx
result: "x=.strftime('2018-01-23)"

当我将两者结合时:

text = "x={:.strftime('%Y-%m-%d)},y={:} ",format(xpos,ymax)
text

#result: format() argument 2 must be str, not Series

#expected: (2018-01-23, 474.60)

标签: pythonpython-3.x

解决方案


注意逗号 ( ,)。在 python 中,逗号通常被读取为元组。

因此,尽管您的代码是有效的,但这并没有按照您的想法执行: text = "x={:.strftime('%Y-%m-%d)'},y={:} ",format(xmax, ymax)

你的意思是: text = "x={:.strftime('%Y-%m-%d)'},y={:} ".format(xmax, ymax)

from datetime import datetime

ymax = 474.600006


texty= "y={:.3f}".format(ymax)
print(texty)

xmax= datetime.today()

textx= "x={:.strftime('%Y-%m-%d)}".format(xmax)
print(textx)

# Here you had `,`format(xpos, ymax)
text = "x={:.strftime('%Y-%m-%d)'},y={:} ".format(xmax, ymax)

print(text)
# result: "x=.strftime('2018-01-23)"

推荐阅读