计算CSV文件中行的编号

时间:2012-12-03 13:10:49

标签: python csv matplotlib

所以我有这个csv文件,一个collumn看起来像这样:

1022
1040
1042
1035
11728
1036
1022
1040
1042
1035
11728
1036
1022
1040
1042
1035
11728

现在我需要计算一个数字的出现方式。我需要这个用matplotlib制作图形图片。因此,图形将显示一个数字发生了多少(在这种情况下,它是一个事件ID)

到目前为止我只有打印该行的代码......

my_reader = csv.reader(open(csvpath))
for col in my_reader:
      print col[3]

如何计算特定列中的数字出现的频率?

4 个答案:

答案 0 :(得分:3)

只需创建从数字到数字的映射。 collections.Counter()类最简单:

import collections

counts = collections.Counter()
for row in my_reader:
    counts[row[3]] += 1

使用collections.defaultdict也是一种选择:

counts = collections.defaultdict(int)
for row in my_reader:
    counts[row[3]] += 1

或者您可以使用普通dict

counts = {}
for row in my_reader:
    counts[row[3]] = counts.get(row[3], 0) + 1

答案 1 :(得分:1)

您可以使用简单的词典。

my_reader = csv.reader(open(csvpath))
my_dict = {}
for row in my_reader:
    try:
        my_dict[row[3]] += 1
    except KeyError:
        my_dict[row[3]] = 0

答案 2 :(得分:1)

此代码将计算行中的总数,如果您想要特定行,则在print语句之前使用if条件并检查count == row_number exa:if count == 3:并获取总数。

         reader=csv.reader(open("first.csv"))
         count=0;
         for row in reader:
             count+=1
             print "total no in row "+str(count)+" is "+str(len(row))
             for i in row:
                 print i

答案 3 :(得分:1)

您可以使用pandas来读取数据,计算值并绘制数据。在幕后,大熊猫使用numpymatplotlib来实现这一目标。 read_csv和绘图命令也适用于多列。

In [29]: df = pd.read_csv('data.csv', names=['my_data']) 

In [30]: counts = df['my_data'].value_counts()

In [31]: counts
Out[31]: 
1022     3
1042     3
1040     3
1035     3
11728    3
1036     2

In [32]: counts.plot(kind='barh')
Out[32]: <matplotlib.axes.AxesSubplot at 0x4f7f510>

value_counts