-3

この種のデータを含む CSV ファイルをインポートする必要があります。

                       January February March
              Amy      4     3      4
              Ben      5     2      0 
              Clara    0     3.5    4  

月 (名前) を持つ一番上の行、名前 (売上) を持つ最初の列、および月に対応する月次予約。

このような Dictionary 出力を取得する方法を探して、月を 0 で削除する必要があります

                {"Amy": {"January ": 4, "February": 3, "March": 4},
                  "Ben": {"January": 5, "February": 2},
                  "Clara": {"February": 3.5, "March": 4}}

どんな助けでも大歓迎です。

ありがとう 、

ラフル

4

3 に答える 3

2

0csv から変数にデータを取得する方法、一意の名前、無効なデータなどをチェックする方法、および値の除外に苦労していると仮定しましょう。

更新: csv ファイルの読み取りがコードに含まれるようになりました:

# Python 3.2
import csv
delimiter = ','
result = {}
with open("data.csv", 'r') as data_file:
    data = csv.reader(data_file, delimiter=delimiter)
    headers = next(data)[1:] # month names starting from 2nd column in csv
    for row in data:
        temp_dict = {}
        name = row[0]
        values = []
        # converting each value from string to int / float
        # (as suggested by OP's example)
        for x in row[1:]:
            try:
                values.append(int(x))
            except ValueError:
                try:
                    values.append(float(x))
                except ValueError:
                    print("Skipping value '{}' that cannot be converted " +
                          "to a number - see following row: {}"
                          .format(x, delimiter.join(row)))
                    values.append(0)
        for i in range(len(values)):
            if values[i]: # exclude 0 values
                temp_dict[headers[i]] = values[i]
        result[name] = temp_dict    
print(result)
于 2012-06-19T14:16:41.160 に答える
0
import csv
ifile = open('test.csv', "rb")
reader = csv.reader(ifile)
rownum = 0
td = {'j': 0, 'f': 0, 'm': 0}
d = {}
for row in reader:
    # Save header row.
    if rownum == 0:
        header = row
    else:
        for c, col in enumerate(row):
            if c != 0:
                td[header] = col
        d[row[0]] = td
于 2012-06-19T14:24:56.873 に答える
0

CSV の区切り文字がわかっている場合は、次のことができます。

tokens = line.split(delimiter)
tokens = [token.strip() for token in tokens]

...CSV の各行に対して。内部辞書のキーを取得するには、解析する最初の行から適切な値を抽出する必要があります。その後、最も外側の辞書のキーを取得するには、 などを使用tokens[0]します。

そうは言っても、あなたの CSV は CSV というより固定幅ファイルのように見えます。

于 2012-06-19T14:09:40.610 に答える