python 如何处理FutureWarning关于将int应用于具有一个项目的Series?

knsnq2tg  于 2023-05-16  发布在  Python
关注(0)|答案(2)|浏览(358)

运行以下代码时

import turtle
import pandas

FONT = 'monaco', 10, "bold"

screen = turtle.Screen()
screen.title("U.S. States Game")
# screen.bgpic("blank_states_img.gif")
image = "blank_states_img.gif"
screen.addshape(image)
turtle.shape(image)

data = pandas.read_csv("50_states.csv")
all_states = data.state.to_list()
answer_state = screen.textinput(title="Guess the state name", prompt="Whats another state name?").title()
print(answer_state)
if answer_state in all_states:
    t = turtle.Turtle() 
    t.hideturtle() 
    t.penup() 
    state_data = data[data.state == answer_state] 
    t.goto(int(state_data.x), int(state_data.y)) 
    t.write(answer_state, font=FONT)
    screen.exitonclick()

这个错误不断出现:
未来警告:不建议在单个元素Series上调用int,并且将来会引发TypeError。使用int(ser.iloc[0])代替
我该怎么办?

mbyulnm0

mbyulnm01#

这是一个未来的警告,意味着你的代码目前没有问题,但在未来的pnadas更新中,你使用的代码将不再受支持,而是会引发一个错误。
我认为第22行(t.goto(int(state_data.x), int(state_data.y)))导致了警告。
有两个解决方案,一个比另一个更好:
1.更改您的代码以使用不同的方法(错误建议的int(ser.iloc[0])),这是更好的方法,因为它将在现在和未来的版本中工作。Here是它建议使用的代码的文档。
1.确保只在支持您的实现的版本上运行代码。虽然可能,这是一个糟糕的选择,如果可能的话,不应该选择。

cgfeq70w

cgfeq70w2#

当运行这两行时:

state_data = data[data.state == answer_state] 
t.goto(int(state_data.x), int(state_data.y))

第一行是“获取状态等于answer_state的所有数据元素”,但是可以有任意数量的这样的元素;该操作返回一个dataframe,data_state.x返回一个series,但是如果该series有多个元素,则无法将其转换为单个int。Python尝试了,但未来的警告似乎让您知道该功能可能不会存在很长时间。将上面的第二行更改为:

t.goto(int(state_data.x[0]), int(state_data.y[0]))

它应该对您有用,尽管如果在data.state == answer_state中没有数据,您仍然可能会遇到一些问题!
P.S.对于将来的堆栈溢出帖子,请确保在帖子标题中包含有关错误和平台的信息

相关问题