c# - 计算csv文件中特定数字的数量

标签 c# csv

我有一个 csv 文件,其中包含 100,000 个 IQ 值。 IQ 的范围是 34-165,所以显然会有很多相同的数字。我正在尝试编写代码来告诉我有多少数字是相同的。例如:IQ 为 49 的有 11 人,IQ 为 62 的有 120 人。我认为使用 List 是最简单的,但我是初学者,仍在学习中。所以只是想知道哪个代码块能够计算出它?

最佳答案

您的问题巧妙地分为两部分:读取 csv 文件和处理结果。

如果您提供更多关于 csv 的信息,或者您迄今为止尝试过的代码示例,Stack Overflow 的好人会更容易提供帮助,但我们仍然可以尝试使用我们现有的.

要读取 csv,请从这里开始: https://docs.python.org/2/library/csv.html

如果您的 csv 是由逗号分隔的数字列表 (120, 62, 37...),这是一个非常简单的操作。如果它有更多信息(例如,如果每一行是“姓名、年龄、性别、智商、出生国家...”),则需要做更多的工作,但仍然很容易做到。

我首先假设您的文件是一个简单的数字列表,以逗号分隔。

所以:

import csv
with open('yourfile.csv', 'r') as csvfile:
    reader = csv.reader(csvfile, delimiter=',')
    for row in reader: 
        # there is only one row!
        # it is a list of numbers (as string values)
        # ie, ['34','35','120','91'...]
        for x in xrange(34,166):  
            # x starts at 34, and iterates to 166-1 = 165
            print x, row.count(str(x)) 
            # 'str(x)' converts the int to a string
            # 'count' counts the number of times that string is present in the list 'row' 

您还可以将这些值添加到字典中供以后使用:定义一个字典而不是打印语句 - "iqs = {}"并且:

iqs[x] = row.count(str(x))

现在您可以随意恢复您的值:

iqs[120]
10 #output

将其放在一起(删除评论):

import csv
with open('yourfile.csv', 'r') as csvfile:
    reader = csv.reader(csvfile, delimiter=',')
    iqs= {}
    for row in reader: 
        for x in xrange(34,166):  
            iqs[x] = row.count(str(x))

如果您的 csv 更复杂,您可以执行两个循环,第一个循环解析 csv(即,创建一个列表而不是“行”),第二个从 34 迭代到 165:

import csv
with open('yourfile.csv', 'r') as csvfile:
    reader = csv.reader(csvfile, delimiter=',')
    lst= []
    for row in reader: 
        #parse row
        lst.append(iq_value_from this row)
    iqs= {}
    for x in xrange(34,166):  
        iqs[x] = lst.count(str(x))

最后,如果您想绘制结果图表,创建两个列表并使用 matplotlib 包 (http://matplotlib.org/users/pyplot_tutorial.html) 绘制它们可能更有用

import csv
import matplotlib.pyplot as plt
with open('yourfile.csv', 'r') as csvfile:
    reader = csv.reader(csvfile, delimiter=',')
    lst = []
    x_values= []
    y_values=[]
    for row in reader: 
        #parse row
        lst.append(iq_value_from this row)
    iqs= {}
    for x in xrange(34,166):  
        x_values.append(x)
        y_values.append(lst.count(str(x)))

plt.plot(x_values,y_values)
plt.show()

关于c# - 计算csv文件中特定数字的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29946326/

相关文章:

c# - 没有找到隐式类型数组的最佳类型

c# - EF Core 的 ConstantExpression 中的正确集合

python - 如何在 Django 中测试文件响应?

python - Django loaddata 验证错误

javascript - d3 仅读取 csv 的第一个属性

c# - 如何使用 NewtonSoft 更新 JSON 对象的属性

c# - 我无法获取自定义控件的选定项

c# - 在 WPF 应用程序中加载大量 Azure Blob 数据

php - 需要通过 PHP 将大型 CSV 文件导入多个 MySQL 表的时间高效方法

Powershell 格式表转 CSV