Also habe ich diese CSV-Datei und eine Spalte sieht so aus:

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

Jetzt muss ich zählen, wie oft eine Zahl vorkommt. Ich brauche das, um ein grafisches Bild mit matplotlib zu machen. Die Grafik zeigt also, wie oft eine Zahl vorkommt (in dieser Situation handelt es sich um eine Ereignis-ID).

Bisher habe ich nur den Code, um diese Zeile zu drucken ...

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

Wie zähle ich, wie oft eine Zahl in dieser bestimmten Spalte vorkommt?

1
DT22 3 Dez. 2012 im 17:10

4 Antworten

Beste Antwort

Erstellen Sie einfach eine Zuordnung von Nummer zu Anzahl. Die Klasse collections.Counter() macht das am einfachsten:

import collections

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

Die Verwendung eines collections.defaultdict ist ebenfalls eine Option:

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

Oder Sie können ein normales dict verwenden:

counts = {}
for row in my_reader:
    counts[row[3]] = counts.get(row[3], 0) + 1
3
Martijn Pieters 6 Dez. 2012 im 22:25

Sie können pandas verwenden, um Ihre Daten zu lesen, die Werte zu zählen und sie dann zu zeichnen. Hinter den Kulissen verwendet Pandas numpy und matplotlib, um dies zu erreichen. read_csv und die Plotbefehle funktionieren auch für mehrere Spalten.

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

1
bmu 4 Dez. 2012 im 19:33

Dieser Code zählt die Gesamtzahl in Zeilen. Wenn Sie eine bestimmte Zeile verwenden möchten, verwenden Sie die if-Bedingung vor der Druckanweisung und prüfen Sie, ob count == row_number exa: if count == 3: und erhalten Sie die Gesamtzahl.

         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
1
Anup 3 Dez. 2012 im 14:02

Sie können ein einfaches Wörterbuch verwenden.

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
1
ellethee 3 Dez. 2012 im 13:25