2

私はこのコードを持っています:

 data = np.genfromtxt('csv_data.csv', dtype=None, names=True)

 print data

その結果、次の出力が得られます

 [('westin,390,291,70,43,19,215,27,813',)
  ('ramada,136,67,53,30,24,149,49,310',)
  ('sutton,489,293,106,39,20,299,24,947',)
  ('loden,681,134,17,5,0,199,4,837',) ('hampton,241,166,26,5,1,159,21,439',)
  ('shangrila,332,45,20,8,2,325,8,407',) ('mariott,22,15,5,0,0,179,35,42',)
  ('pan_pacific,475,262,86,29,16,249,15,868',)
  ('sheraton,277,346,150,80,26,249,45,879',)
  ('westin_bayshore,390,291,70,43,19,199,27,813',)]

列ヘッダーはコピーされませんでした。

  Hotel,excellent,verygood,average,poor,terrible,cheapest,rank,reviews

ファイルから。私がやろうとしているのは、Pythonの二元データ構造に出力を保存することです。この出力を辞書に変換する方法はありますか?

これを解析する関数を書くことはできますが、Pythonに組み込み関数があるかどうか疑問に思いました。

ありがとう

4

4 に答える 4

2

パラメータに値を指定していませんdelimiter。したがって、np.genfromtxtデフォルトNoneを使用し、スペースを使用してフィールドを区切ってみてください。

あなたが使用する必要があります

np.genfromtxt(your_file, dtype=None, delimiter=',', names=True)
于 2012-10-23T14:39:05.463 に答える
0

シンプルバージョン:

d = {  item[0].split(',')[0] : item[0].split(',')[1:] for item in data  }

戻る :

{'sutton': ['489', '293', '106', '39', '20', '299', '24', '947'], 'hampton': ['241', '166', '26', '5', '1', '159', '21', '439'], 'westin_bayshore': ['390', '291', '70', '43', '19', '199', '27', '813'], 'sheraton': ['277', '346', '150', '80', '26', '249', '45', '879'], 'ramada': ['136', '67', '53', '30', '24', '149', '49', '310'], 'mariott': ['22', '15', '5', '0', '0', '179', '35', '42'], 'loden': ['681', '134', '17', '5', '0', '199', '4', "837'"], 'shangrila': ['332', '45', '20', '8', '2', '325', '8', '407'], 'pan_pacific': ['475', '262', '86', '29', '16', '249', '15', '868']}

そしてより複雑な(dictのdict):

d = {  item[0].split(',')[0] : { headers[i] : int( item[0].split(',')[i+1].strip("'") ) for i in range(len( item[0].split(',')[1:] ) )   }  for item in data  }

戻る :

{'sutton': {'poor': 39, 'cheapest': 299, 'average': 106, 'terrible': 20, 'rank': 24, 'reviews': 947, 'excellent': 489, 'verygood': 293}, 'hampton': {'poor': 5, 'cheapest': 159, 'average': 26, 'terrible': 1, 'rank': 21, 'reviews': 439, 'excellent': 241, 'verygood': 166}, 'westin_bayshore': {'poor': 43, 'cheapest': 199, 'average': 70, 'terrible': 19, 'rank': 27, 'reviews': 813, 'excellent': 390, 'verygood': 291}, 'sheraton': {'poor': 80, 'cheapest': 249, 'average': 150, 'terrible': 26, 'rank': 45, 'reviews': 879, 'excellent': 277, 'verygood': 346}, 'ramada': {'poor': 30, 'cheapest': 149, 'average': 53, 'terrible': 24, 'rank': 49, 'reviews': 310, 'excellent': 136, 'verygood': 67}, 'mariott': {'poor': 0, 'cheapest': 179, 'average': 5, 'terrible': 0, 'rank': 35, 'reviews': 42, 'excellent': 22, 'verygood': 15}, 'loden': {'poor': 5, 'cheapest': 199, 'average': 17, 'terrible': 0, 'rank': 4, 'reviews': 837, 'excellent': 681, 'verygood': 134}, 'shangrila': {'poor': 8, 'cheapest': 325, 'average': 20, 'terrible': 2, 'rank': 8, 'reviews': 407, 'excellent': 332, 'verygood': 45}, 'pan_pacific': {'poor': 29, 'cheapest': 249, 'average': 86, 'terrible': 16, 'rank': 15, 'reviews': 868, 'excellent': 475, 'verygood': 262}}
于 2012-10-23T14:46:41.687 に答える
0
import csv 
f = open("csv_data",'r')
holder = csv.reader(f,delimiter = ',')
data_dict = {} 
headers = [] 
first_row = True   
for row in holder:
  if first_row:
    first_row = False
    for header in row:
      colname = str(header)
        headers.append(colname)
        data_dict[colname] = []
  else:
    colnum = 0
    for datapoint in row:
      data_dict[headers[colnum]].append(int(datapoint))
      colnum += 1

したがって、列ヘッダー(csvファイルの最初の行)であるキーと、リスト(csvファイルの残りのデータ)としてそれらのキーに関連付けられた値を持つ辞書変数を持つことができます。さらに、headerはすべての列ヘッダーのリストです。

于 2012-10-23T14:48:21.657 に答える
0

csvモジュールを使用してファイルを自分で処理します。

以下はファイルをby_hotel取得し、キーがホテル名であり、値が元の行のフィールド名->値の辞書であるという辞書を作成します(ホテル名も含まれていることに注意してください...)

import csv

with open('csv_data.csv') as fin:
    csvin = csv.DictReader(fin)
    headers = csvin.fieldnames
    by_hotel = {row['Hotel']: row for row in csvin}

print by_hotel['sutton']['excellent']
# 489

リストを元の順序に戻したい場合は、次のようにすることができます。

print [hotel['sutton'][fname] for fname in headers]

注意:ただし、計算のために値を整数に変換することをお勧めします。

于 2012-10-23T17:00:56.590 に答える