所以我有这个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]
如何计算特定列中的数字出现的频率?
答案 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
来读取数据,计算值并绘制数据。在幕后,大熊猫使用numpy
和matplotlib
来实现这一目标。
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>