直接用 Pandas 绘制时间序列

Plotting time series directly with Pandas

在上面的数据框中,我只想创建一个线图,以便我们了解每一列每年的趋势信息。我在相关帖子上读过 pivot-table ,但是当我实现它时,它说没有要聚合的数字。我不想汇总一些东西。我只需要列号的 y 轴。

然而,当我使用 plot() 时,它在 x 轴上绘制年份,并且仅在 x 轴上绘制其他列。为什么会发生这种情况以及我做错了什么?

欢迎使用 Whosebug,please do not use image of code and data

快速解答

# change the type of non numeric
piv['second_col'] = piv['second_col'].str.replace(',','').astype(float)
piv['last_col'] = piv['last_col'].str.replace(',','').astype(float)
# then plot
piv.plot(x='Year')

说明

Dataframe的索引是默认的x-axis,所以需要指定:

piv.plot(x='Year')

或将Year设置为索引:

piv.set_index('Year').plot()

另一件事是 plot 函数绘制数值,第二列和最后一列类型是 string 您可以检查:

df.dtypes

当您使用 pandas.read_csv 读取文件时,它必须推断数据类型。有时它会弄错。您可以强制 pandas 尝试将数据转换为浮点数:

piv = piv.astype(float)

但是你会得到这样的错误:

ValueError: could not convert string to float: '2,499'

但是为什么呢?

数据有一个comma-separated numeric value,需要在转换为float前去掉

piv['name_of_column'] = piv['name_of_column'].str.replace(',','').astype(float)