直接用 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)
在上面的数据框中,我只想创建一个线图,以便我们了解每一列每年的趋势信息。我在相关帖子上读过 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)