【问题标题】:Creating area chart from csv file containing multiple values in one column从一列中包含多个值的csv文件创建面积图
【发布时间】:2021-04-19 12:53:41
【问题描述】:

我有一个以 csv 格式生成输出的模型。列如下(只是一个虚构的例子):

|    Car    |    Price    |    Year    |

例如,汽车列有不同的汽车制造商,每年的平均汽车价格在“价格”列中。

例子

|    Car    |    Price    |    Year   |

|    BMW    |    34000    |    1990   |

|    BMW    |    35000    |    1991   |

|    BMW    |    37000    |    1993   |

|    AUDI   |    32000    |    1991   |

|    AUDI   |    33500    |    1992   |

|    AUDI   |    34000    |    1993   |

|    AUDI   |    35500    |    1994   |

|    SEAT   |    25600    |    1994   |
...

我希望能够绘图:

  1. 一张面积图,其中包含每个汽车制造商在 20 年期间(例如 1990-2010 年)内价格可用的年份的所有价格。
  2. 有些年份,某些汽车制造商没有可用的价格,因此并非所有汽车制造商的 csv 中都有 20 行数据,输出只是跳过整年和行。请参阅示例中的 BWM,缺少 1992。

由于我使用不同的输入运行模型,“汽车”的实际名称会发生​​变化(价格也会发生变化),因此我需要代码来获取某个汽车名称,然后绘制每次运行的可用值. 这只是一个简化的例子,但实际数据的布局是相同的。非常感谢对此提供一些帮助!

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    试试这个,我认为这可能有效。另外,我不是专业人士,只是初学者

    import pandas as pd
    import matplotlib.pyplot as plt
    med_path = "path for csv file"
    med = pd.read_csv(med_path)
    fig, ax = plt.subplots(dpi=120)
    area = pd.DataFrame(prices, columns=[‘a’, ‘b’, ‘c’, ‘d’]) # in the places of a,b,c replace with years
    area.plot(kind=’area’,ax=ax)
    plt.title(‘Graph for Area plot’)
    plt.show()
    
    

    我认为这可能不是硬编码所有值的理想方法,但您可以使用 for 循环遍历 csv 文件的内容

    【讨论】:

    • 对于 'a', 'b', 'c' 部分,您是否要我将 columns=['y'] 放在我的文件中名称为 'y' 的年份列,或者我应该像'1990','1991','1992'等一一陈述所有年份?我在“区域=”行中收到错误。它说: NameError: name 'prices' is not defined(即使我根据我的 excel 将其更改为我的实际值)。
    • 是的!将年份的值作为一个列表,以便您可以循环遍历它吗?
    • 年份现在被写成一个列表,但由于第一个参数价格没有定义,所以它不起作用。 ' in 6 fig, ax = plt.subplots(dpi=120) 7 df.columns ----> 8 area = pd.DataFrame(ProductionByTechnologyAnnual, columns=['2020 ','2021','2022','2023','2024','2025','2026','2027','2028','2029','2030','2031','2032', '2033','2034','2035','2036','2037','2038','2039','2040']) 9 area.plot(kind='area',ax=ax) NameError:名称'ProductionByTechnologyAnnual'未定义'
    • 或者这样做!首先,通过汽车列进行循环,并将它们存储在汽车名称相同的变量中。您可以使用此行df.loc[df['car'] == BMW]。现在您可以循环遍历有限的值了。如果您现在将值存储为 BMW,您可以轻松地遍历价格和年份。这样就很容易继续了。
    • 感谢您的 cmets Sasidhar,不幸的是它不起作用。无论我在== 符号之后写什么值或名称,它都表明没有为该值定义名称。即使我在打印出df.head() 时可以看到名称
    猜你喜欢
    • 2020-09-08
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 2014-09-19
    • 1970-01-01
    相关资源
    最近更新 更多