0

CSV ファイルで最も一般的な値を数え、CSV ファイルの各項目の横に出現値を追加しようとしています。例えば:

CSV ファイル:

  * 8 Values in Column 1*
  HelloWorld
  HelloWorld
  HelloSaturn
  HelloMars
  HelloPluto
  HelloSaturn
  HelloMoon
  HelloMoon

最も一般的な計算のための Python コード:

  #Removed Code - Take each row in CSV and append to list#
  #Create new list, count common occurrences out of 8 items
  newList = []
  counter = collections.Counter(newList)
  d = counter.most_common(8)
  print d

印刷された出力 (上記の CSV で最も一般的な値を計算したものです。たとえば、2 つの「HelloWorld」があります):

  [('HelloWorld', 2), ('HelloMars', 1), ('HelloSaturn', 2), ('HelloPluto', 1), ('HelloMoon', 2)]

現在、これらの値を取得して、CSV ファイルの各値の横に追加/挿入しようとしています。たとえば、次のようになります。

  * 8 Values in Column 1* *Occurrence*
  HelloWorld 2
  HelloWorld 2
  HelloSaturn 2
  HelloMars 1
  HelloPluto 1
  HelloSaturn 2
  HelloMoon 2
  HelloMoon 2

これどうやってするの?

4

2 に答える 2

2

CSV ファイルを書き換えるには、 csv.writerオブジェクトを使用する必要があります。

  1. csv.readerを使用して、CSV ファイルをメモリに読み込みます (行のリストなど) 。
  2. 既存のコードを使用して発生頻度を計算する
  3. ステップ 1 で読み取った各行を反復処理します。 csv.writer を使用して、行の各列を出力します。行の最後に、ステップ 2 で計算した対応する頻度を出力します。

コードは次のようになります (完全にテストされていません)。

import csv
list_of_rows = list()
with open(filename) as fin:
    reader = csv.reader(fin)
    for row in reader:
       list_of_rows.append(row)

# calculate frequency of occurrence
counter = ...

with open(filename, "w") as fout:
    writer = csv.writer(fout)
    for row in counter.most_common(8):            
        # row is now (word, frequency)
        writer.writerow(row)
于 2013-02-08T13:45:25.327 に答える
1
import csv

# I fake here the opening and extracting from a CSV file
# to obtain a list of the words of the first column
ss = """HelloWorld
HelloWorld
HelloSaturn
HelloMars
HelloPluto
HelloSaturn
HelloMoon
HelloMoon"""
column = ss.splitlines()


# Now, the counting
from collections import Counter
c = Counter(column) 

# Seeing the counter we got
print '\n'.join(c)

# Putting the result in a CSV file
with open('resu.csv','wb') as g:
    gw = csv.writer(g)
    gw.writerows([item,c[item]] for item in column)
于 2013-02-09T04:17:59.550 に答える