我能把这个数据框转换成线图吗

2024-06-09 16:46:03 发布

您现在位置:Python中文网/ 问答频道 /正文

是否有任何方法可以将这个数据帧转换成一个折线图,其中每个TypeLoc都有一条单独的线,在python中使用pandas测量Y轴上的值,以及x轴上的年份? 我已经尝试了很多方法,但是对python非常陌生,所以没有取得任何进展。 我花了大约5个小时想弄明白,这似乎是最好的提问地点

  TESTDATA = StringIO("""DateCode;Value;TypeLoc;Expend_or_Visit;
2014;186;Seaside - beach;Expenditure;
2019;1456;Small town;Expenditure;
2016;4916;All areas;Expenditure;
2018;5474;All areas;Expenditure;
2013;217;Seaside - beach;Expenditure;
2018;6;Seaside - other;Expenditure;
2018;1234;Small town;Expenditure;
2015;230;Seaside resort or town;Expenditure;
2016;302;Seaside resort or town;Expenditure;
2019;359;Seaside resort or town;Expenditure;
2017;458;Seaside resort or town;Expenditure;
2015;3922;All areas;Expenditure;
2014;5020;All areas;Expenditure;
2013;4647;All areas;Expenditure;
2016;1037;Small town;Expenditure;
2013;68;Seaside - other;Expenditure;
2013;1035;Small town;Expenditure;
2017;46;Seaside - beach;Expenditure;
2019;35;Seaside - other;Expenditure;
2015;914;Small town;Expenditure;
2016;32;Seaside - other;Expenditure;
2016;249;Seaside - beach;Expenditure;
2015;36;Seaside - other;Expenditure;
2014;128;Seaside - other;Expenditure;
2017;75;Seaside - other;Expenditure;
2015;81;Seaside - beach;Expenditure;
2019;237;Seaside - beach;Expenditure;
2018;151;Seaside - beach;Expenditure;
2019;457;Village;Expenditure;
2015;308;Village;Expenditure;
2019;3400;City/large town;Expenditure;
2018;3111;City/large town;Expenditure;
2017;1377;Small town;Expenditure;
2017;883;Village;Expenditure;
2014;1398;Small town;Expenditure;
2014;2873;City/large town;Expenditure;
2015;2254;City/large town;Expenditure;
2017;3379;City/large town;Expenditure;
2016;2630;City/large town;Expenditure;
2014;286;Seaside resort or town Expenditure;
2013;2850;City/large town;Expenditure;
2013;206;Seaside resort or town;Expenditure;
2017;778;Rural countryside;Expenditure;
2016;520;Rural countryside;Expenditure;
2017;5995;All areas;Expenditure;
2019;429;Rural countryside;Expenditure;
2015;402;Rural countryside;Expenditure;
2018;228;Seaside resort or town;Expenditure;
2018;502;Rural countryside;Expenditure;
2016;482;Village;Expenditure;
2014;510;Village;Expenditure;
2018;651;Village;Expenditure;
2013;483;Village;Expenditure;
2014;612;Rural countryside;Expenditure;
2019;5777;All areas;Expenditure;
2013;545;Rural countryside;Expenditure;
     """)

链接到完整数据集https://docs.google.com/spreadsheets/d/1bRaq8I3JW6yZ0oucoVaFVH4ldd-HxAUZUBgeUk7KBgs/edit?usp=sharing (我无法将其读入笔记本,因此手动输入所有内容。) 数据帧1
dataframe

*试图返回我的代码,以从中获取我的尝试- 这是我最好的尝试,距离现在还有几英里远:

df.set_index('TypeLoc', inplace=True)

df_expend = df_expend.transpose()

df_expend = df.query('Expend_or_Visit == "Expenditure"')

import matplotlib.pyplot as plt
df_expend.plot(kind='line')
plt.show()

Tags: orcityallsmalllargeotherresortbeach
2条回答

这里有一个方法。您需要先透视数据帧,然后再绘制它:

df = pd.read_csv(StringIO(TESTDATA), sep=";")
df = df[["DateCode", "Value", "TypeLoc"]].pivot(index = "DateCode", columns = "TypeLoc")
df = df.droplevel(0, axis=1)
for col in df.columns:
    plt.plot(df.index, df[col], label =col)
plt.show()

在样本数据有限的情况下,输出为:

enter image description here

要针对较大的数据集(链接中的数据集)运行此代码,请使用:

df = pd.read_csv("scot_stats - Sheet1.csv", header = 1)
df = df[df.Units == "million pounds (GBP)"]

df = df[["DateCode", "Value", "TypeLoc"]].pivot(index = "DateCode", columns = "TypeLoc")
df = df.droplevel(0, axis=1)
for col in df.columns:
    plt.plot(df.index, df[col], label =col)
plt.show()

输出如下。通过更改第二行上的条件,可以为访问创建单独的图表

enter image description here

import pandas as pd
import seaborn as sns
import io

TESTDATA = io.StringIO("""DateCode;Value;TypeLoc;Expend_or_Visit;
2014;186;Seaside - beach;Expenditure;
2019;1456;Small town;Expenditure;
2016;4916;All areas;Expenditure;
2018;5474;All areas;Expenditure;
2013;217;Seaside - beach;Expenditure;
2018;6;Seaside - other;Expenditure;
2018;1234;Small town;Expenditure;
 """)

df = pd.read_csv(TESTDATA, sep =";")

sns.lineplot(x='DateCode', y='Value', hue= 'TypeLoc',data=df)

相关问题 更多 >