尝试使用matplotlib绘制条形图时出错。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
source_data= pd.read_csv("ehresp_2015.csv")
然后我从我需要的数据集中提取两列
results_1 = source_data[["EUGROSHP","EUGENHTH"]]
摆脱负值
results_1_new = results_1[results_1>0]
绘制数据
x=results_1_new['EUGROSHP']
y=results_1_new['EUGENHTH']
plt.bar([x],[y])
plt.show()
我收到错误TypeError:无法将系列转换为
答案 0 :(得分:1)
使用df.plot
,应该更容易。
source_data.set_index("EUGROSHP")["EUGENHTH"].plot(kind='bar', legend=True)
plt.show()
另外,请注意results_1[results_1>0]
会在您的列中为您提供一堆NaN
,您是想过滤一列吗?
答案 1 :(得分:1)
您将要封装的系列绘制在列表plt.bar([x],[y]
中。通过这种方式,您可以要求matplotlib在位置x
和高度y
处准确绘制一个条形图。由于x
,y
不是数值,而是系列本身,这当然是不可能的,会导致错误TypeError: cannot convert the series to <type 'float'>
解决方案非常简单,不要将系列放入列表中,而是将它们保留为系列:
plt.bar(x,y)
<小时/> <小时/>
只是为了向您展示在提问时可能会使用的最小可验证示例,这里是一个完整的代码:
import numpy as np; np.random.seed(42)
import matplotlib.pyplot as plt
import pandas as pd
fig, axes = plt.subplots()
data = pd.DataFrame({"a":np.arange(10)-2,"b":np.random.randn(10)})
results_1 = data[["a","b"]]
results_1_new = results_1[results_1>0]
x=results_1_new['a']
y=results_1_new['b']
plt.bar(x,y)
plt.show()