【问题标题】:Python read csv file and store variablesPython读取csv文件并存储变量
【发布时间】:2021-03-10 16:36:45
【问题描述】:

我对 python 很陌生,所以这应该是一个相当简单的问题。我想从 csv 文件创建条形图。该文件包含两列,标题为“Latitude”和“TempAnom”。我希望能够读取 csv 文件并将数据存储为 lat 和 tAnom。实现这一目标的最佳方法是什么?

Latitude TempAnom
-89 0.06997871
-87 0.06997871

这是我迄今为止尝试过的,但我最终得到一个 KeyError: 'Latitude':

    filename='2016_tAnoms.csv'

    lat = []
    tAnom = []
    with open(filename,'r') as csv_file:
      csv_reader = csv.DictReader(csv_file, delimiter=',')
      for row in csv_reader:
        lat.append(row['Latitude'])
        tAnom.append(row['TempAnom'])

然后我应该能够执行以下操作来获取我的条形图:

    import matplotlib.pyplot as plt

    plt.bar(lat,tAnom)
    plt.title('2016 Temperature Anomalies by Latitude Band')
    plt.xlabel('Latitude')
    plt.ylabel('Temperature Anomaly (°C)')
    plt.show()

尝试 2:运行正确,但图表缺少数据

    filename='2016_tAnoms.csv'

    lat = []
    tAnom = []
    with open(filename,'r') as csvfile:
      points = csv.reader(csvfile, delimiter=',')
      next(points)
      for row in points:
        lat.append(int(row[0]))
        tAnom.append(int(float(row[1])))

Produced Graph 应该有从 -89 到 89 的数据,但是有很多空白,并且 int(float(row1)) 将数据覆盖到最接近的整数。我想保留小数。

【问题讨论】:

    标签: python csv


    【解决方案1】:

    您将要导入 csv 并将您的变量声明为列表。由于 plt 将能够使用列表来显示数据。

    import matplotlib.pyplot as plt
    import csv
    
    lat = []
    tAnon = []
    

    您可以从那里继续打开您拥有的 csv 文件,并将这些列中的数据附加到您的列表中。

    with open('filename', 'r') as csvfile:
        points = csv.reader(csvfile, delimiter=',')
        for row in points:
            lat.append(flaot(row[0]))
            tAnon.append(float(row[1]))
    

    然后你可以像上面那样绘制你的观点。如果您对读取和写入 csv 仍然有些困惑,请查看此内容。 https://realpython.com/python-csv/

    【讨论】:

    • 抱歉,尝试将附加的 tAnon 更改为浮点数而不是整数。您可能还需要对 lat 追加执行相同操作。
    • 谢谢。知道为什么我上面生成的图表包含很多缺失的空白并且似乎将值四舍五入到最接近的十分之一吗?许多值是小数点右侧的 7-8 位小数。
    • 在不了解您的数据的情况下,我无法为您提供太多帮助。找到了这个,希望它对你有用stackoverflow.com/a/29188910/4797904
    【解决方案2】:

    我的条形图没有按我想要的方式显示,因为当我的数据需要小数时,我将它们转换为整数。我添加了“从十进制导入十进制”并将 int(float(row[1])) 更改为 Decimal(row[1])。

        from decimal import Decimal
    
        filename='2016_tAnoms.csv'
    
        lat = []
        tAnom = []
        with open(filename,'r') as csvfile:
          points = csv.reader(csvfile, delimiter=',')
          next(points)
          for row in points:
            lat.append(int(row[0]))
            tAnom.append(Decimal(row[1]))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-03
      • 2019-04-21
      相关资源
      最近更新 更多