数据可视化问题,为什么一直报错


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

Data = pd.read_csv('fangjia2023_清洗.csv',sep=',')
plt.figure(figsize=(12,8))
ax = plt.axes()
ax.set_facecolor("lavender")#背景色
plt.rcParams['font.sans-serif']=['SimHei']
x=Data['城市']
y=Data['房价']
plt.scatter(x,y,c='mediumpurple')
z = np.polyfit(x, y, 1)#numpy线性拟合
p = np.poly1d(z)#多项式
plt.plot(x,p(x),color='rebeccapurple',linestyle="--")#线的格式
print("y=%.6fx+(%.6f)"%(z[0],z[1]))#打印拟合式
plt.grid()  # 显示网格线
plt.xlabel("城市名称",size=15)
plt.ylabel("房子价格",size=15)
plt.title("房价排名与城市发展的关系",size=15)
plt.show()



    z = np.polyfit(x, y, 1)#numpy线性拟合
  File "<__array_function__ internals>", line 180, in polyfit
  File "D:\python3.6.2\lib\site-packages\numpy\lib\polynomial.py", line 629, in polyfit
    x = NX.asarray(x) + 0.0
TypeError: can only concatenate str (not "float") to str

为什么报错啊?

先转换下,字符串和数字没法直接连接

x=Data['城市'],很明显变量x中存放了城市名称,他们的类型是字符串,而y=Data['房价']中存放的是房价,类型是浮点数。
z = np.polyfit(x, y, 1)#numpy线性拟合 线性拟合当然是要求x,y都是浮点数了。
你一定要拟合的话,只能把城市名称转化为相应的整数编号,把x改成下面这样

x = pd.factorize(Data['城市'])[0]

完整代码改成下面这样

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
Data = pd.read_csv('fangjia2023_清洗.csv', sep=',')
x = pd.factorize(Data['城市'])[0]
y = Data['房价']
plt.figure(figsize=(12, 8))
ax = plt.axes()
ax.set_facecolor("lavender")
plt.rcParams['font.sans-serif'] = ['SimHei']

plt.scatter(x, y, c='mediumpurple')
z = np.polyfit(x, y, 1)
p = np.poly1d(z)
plt.plot(x, p(x), color='rebeccapurple', linestyle="--")

print("y=%.6fx+(%.6f)" % (z[0], z[1]))

plt.grid()
plt.xlabel("城市名称", size=15)
plt.ylabel("房子价格", size=15)
plt.title("房价排名与城市发展的关系", size=15)
# 设置横坐标刻度及标签
plt.xticks(x, Data['城市'], rotation=90)
plt.show()

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^