我有一个 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/