繁体   English   中英

如何从 Python 中的 CSV 文件制作图形/图表?

[英]How do i make a graph/diagram from a CSV file in Python?

这是我第一次在这个论坛上提问,希望我不会自欺欺人。 我是一名 IT 教育专业的学生,今天我简要介绍了 CSV 和 Matplotlib 库。 我的老师给了我一个 CSV 文件,以及一些作业。 其中一项任务是制作 CSV 文件中的最高和最低温度以及相应日期的图表。 我需要行号,我需要程序来理解单元格的正确格式/语法,但我真的不知道该怎么做。 CSV 文件的片段在这里这是我得到的:

import csv
import matplotlib.pyplot as plt

filename = 'death_valley_2018_simple.csv'
with open(filename) as f:
    csv_reader = csv.reader(f, delimiter=',')
    line_count = 0

    for row in f:
        x=(row[4], row[5])
        y=(row[2])
        print(row[2])
        print(row[4])
        print(row[5])

plt.bar(x,y)
plt.xticks(y)
plt.ylabel('Dates')
plt.title('Plot')
plt.show()

结果是这个“条形图” ,我从这里阅读了其他论坛帖子,在 Discord 上四处询问,并阅读了 CSV 的文档。 也许答案就在那里,但我当时不明白。 文件中有 365 行,因此最好将程序限制为前 10 行,而不是整个文件,但我也不知道该怎么做。 我希望有人能像我 5 岁一样向我解释这一点。

个人建议

不用担心; 我接到你了。 但首先是一些建议。 我记得当我在这个论坛上发布我的第一个问题时,我不知道提出问题的正确方法(当时我的英语不是那么好)。 问一个完美问题的关键是先搜索(你已经这样做了),然后如果你没有找到答案,你应该尽可能清楚和简短地问你的问题。 我并不是说不要提供足够的信息,但是如果您可以用更少的词提出问题并且您的问题仍然尽可能清楚,那么您应该这样做。 为什么? 因为事实是,如果问题很长,很多人会跳过这个问题。 刚才打开你的问题,看到台词,有点害怕,想跳过:D,不过几分钟就解决了,一点都不吓人。 我不太关心写长答案,因为有问题的人会在必要时阅读您的答案。 请注意,所有这些都只是我的个人经历。 您还应该寻找更好的初学者指南来在此论坛和类似平台上提问。 我的建议: http://www.catb.org/~esr/faqs/smart-questions.html

现在的答案

而不是csv库,它是一个 Python 标准库(意味着它是编程语言的一部分,当你安装它时不需要单独安装),我更喜欢使用pandas pandas将使您的生活更轻松。 但是你必须先安装它:

pip install pandas

现在很简单,让我们导入所有内容并加载csv文件。

import pandas as pd
import matplotlib.pyplot as plt

filename = 'death_valley_2018_simple.csv'
dataframe = pd.read_csv(filename)

dataframe包含您的csv文件的行和列。 您可以简单地 plot 每个日期对应的最低和最高温度:

plt.plot(dataframe["DATE"], dataframe["TMAX"])
plt.plot(dataframe["DATE"], dataframe["TMIN"])

但它看起来并不漂亮,因为DATE列被识别为字符串,因此matplotlib将显示每个日期。 它无法识别该字段是时间序列。 我们需要将此列更改为datetime

dataframe["DATE"] = pd.to_datetime(dataframe['DATE'], format="%Y-%m-%d")

所以我们只是告诉 pandas 将DATE列更改为datetime ,我们通过指定格式字段来告诉年月日的数字在哪里。 %Y 代表年份,然后有一个破折号,%m 代表月份,并且...,我们使用大写 Y,因为 %y 代表年份,而我们只有右边的两位数。 在这种情况下,由于它非常简单,即使我们没有指定格式, pandas也会理解如何将此列转换为datetime时间。

现在我们只需要像以前一样 plot 我们的图表/图表:

plt.plot(dataframe["DATE"], dataframe["TMAX"])
plt.plot(dataframe["DATE"], dataframe["TMIN"])

因此,在完成所有操作后,您的代码应如下所示:

import pandas as pd
import matplotlib.pyplot as plt

filename = 'death_valley_2018_simple.csv'
dataframe = pd.read_csv(filename)

dataframe["DATE"] = pd.to_datetime(dataframe['DATE'], format="%Y-%m-%d")

plt.plot(dataframe["DATE"], dataframe["TMAX"])
plt.plot(dataframe["DATE"], dataframe["TMIN"])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM