【问题标题】:how to find avg of column of csv file如何找到csv文件列的平均值
【发布时间】:2016-05-05 12:07:49
【问题描述】:
import csv
with open('Met.csv', 'r') as f:
    reader = csv.reader(f, delimiter=':', quoting=csv.QUOTE_NONE)
    for row in reader:
        print row

我无法继续如何从我尝试过的 csv 文件中获取列

print row[:column_name]

name    id  name    reccla  mass (g)    fall    year    GeoLocation

Aachen  1       Valid   L5   21     Fell    01/01/1880 (50.775000, 6.083330)    
Aarhus  2       Valid   H6  720     Fell    1/1/1951  (53.775000, 6.586560)
Abee    6       Valid   EH4 --      Fell    1/1/1952 (50.775000, 6.083330)  
Acapul  10      Valid   A   353      Fell   1/1/1952  (50.775000, 6.083330)
Acapul  1914    valid   A    --      Fell   1/1/1952 (50.775000, 6.083330)
AdhiK   379    Valid    EH4 56655    Fell   1/1/1919 (50.775000, 6.083330)

我想要平均质量 (g)

【问题讨论】:

  • csv 文件的结构是什么?
  • name id nametype recclass mass Aarhus 2 有效 H6 720 Abee 6 有效 EH4 107000 Acapulco 10 有效 Acapulcoite 914 Achiras 370 有效 L6 780 Adhi Kot 379 有效 EH4 4239 Adzhi 390 有效 LL3-6 910 Agen 392 30000
  • 请在问题中添加数据

标签: python python-2.7 python-3.x numpy


【解决方案1】:

尝试pandas 而不是从csv 读取

import pandas as pd
data = pd.read_csv('Met.csv')

使用pandas 抓取列和执行操作要容易得多。 在这里,我将 csv 内容加载到数据框。

加载的数据:样本数据

>>> data
       name   id nametype     recclass    mass
0    Aarhus    2    Valid           H6     720
1      Abee    6    Valid          EH4  107000
2  Acapulco   10    Valid  Acapulcoite     914
3   Achiras  370    Valid           L6     780
4  Adhi Kot  379    Valid          EH4    4239
5     Adzhi  390    Valid        LL3-6     910
6      Agen  392    Valid           H5   30000

只是质量栏:

您可以访问单个列作为数据['column name']

>>> data['mass']
0       720
1    107000
2       914
3       780
4      4239
5       910
6     30000
Name: mass, dtype: int64

平均质量列:

>>> data['mass'].mean()
20651.857142857141

【讨论】:

  • 对 pandas 文件中的行数是否有任何限制,因为我的文件包含 ~4000 个值,并且当我尝试从打印检查它时它无法打印
  • 4000 应该没问题。熊猫可以轻松处理
  • 我遇到错误 |||1-- return self._getitem_column(key) || 2--in _get_item_cache values = self._data.get(item) ||3--- in get loc = self.items.get_loc(item) ||4--- get_loc return self._engine.get_loc(key) | |5-- pandas.index.IndexEngine.get_loc (pandas\index.c:3979) ||6-- pandas 关于文件行数是否有任何限制,因为我的文件包含约 4000 个值且无法打印当我尝试从打印中检查它时
  • 我正在尝试如果可能请查看错误感谢@astrosyam 的帮助
  • @HariRama 在这一点上,最好提供一小部分数据来证明这一点(以及有问题的代码)。请编辑您的原始问题。
【解决方案2】:

您可以使用csv.DictReader() 代替csv.reader()。以下代码对我来说很好

import csv

mass_list = []
with open("../data/Met.csv", "r") as f:
    reader = csv.DictReader(f, delimiter="\t")
    for row in reader:
        mass = row["mass"]
        if mass is not None and mass is not "--":
            mass_list.append(float(row["mass"]))

avg_mass = sum(mass_list) / len(mass_list)
print "avg of mass: ", avg_mass

希望对你有帮助。

【讨论】:

  • 但它不起作用,你能看到编辑过的文件吗?这仍然应该工作吗?
  • 您的文件中似乎缺少一些值。您可以在计算平均值之前添加一些检查。有关详细信息,请参阅更新的代码。
  • 你是对的,存在缺失值,但数据仅此
  • @HariRama 因此您可以添加代码来验证它是否是缺失值。
猜你喜欢
  • 2021-12-13
  • 1970-01-01
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-01
  • 2022-06-30
相关资源
最近更新 更多