“在绘制pandas系列数据时,TypeError:无法将系列转换为<type'flo'=”“>”

时间:2017-10-01 13:41:44

标签: python pandas matplotlib typeerror series

尝试使用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:无法将系列转换为

2 个答案:

答案 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处准确绘制一个条形图。由于xy不是数值,而是系列本身,这当然是不可能的,会导致错误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()

enter image description here