2016-03-23 7 views
0

理解リストをnumpy配列に変換する際に問題があります。私はさまざまな理解リストをループしています。しかし、いくつかはうまくいくようです。 shapeを印刷してこのエラーを確認しましたが、一部の繰り返しで正しいサイズが返されませんでした。そのため、私はこれらの配列が配列(basic_info)の別のセットと連結することはできません。また、私はこれらの反復に対してnumpyの配列自体を出力し、 '['に余分なスペースがあることに気付きました。どんな助けでも大歓迎です!理解リストをナンプーアレイに変換する - グリッチ?

以下を参照してください:

(1)これは私が(2)shapeを印刷する際に、列の数が返されていないリストの内包に

html = browser.page_source 
      soup = BeautifulSoup(html) 
      table = soup.find('div', {'id': 'placeBody_dynField77_divScroll'}) 
      table_body = table.find('tbody') 
      rows = table_body.findAll('tr')[1:] 
      Ingredients = [] 
      for row in rows: 
       cols = row.find_all('td') 
       cols = [ele.text.strip() for ele in cols] 
       Ingredients.append([ele for ele in cols if ele]) 
      Ingredients = np.array(Ingredients) 

を作成する方法です( 8でなければなりません)

print(Ingredients) 
print(Ingredients.shape, basic_info2.shape) 

>> 

[ ['Distillates (Petroleum), Hydrotreated Heavy Naphthenic', '64742-52-5', 'n/a', '40.00 %', '50.00 %', '45.00 %', '40-<50%', '0.00 %'] 
['2-(2-butoxyéthoxy) Éthanol', '112-34-5', 'n/a', '10.00 %', '20.00 %', '15.00 %', '10-<20%', '0.00 %'] 
['Low Odor Base Solvent', '64742-47-8', 'n/a', '10.00 %', '20.00 %', '15.00 %', '10-<20%', '0.00 %'] 
['Other Components Below Reportable Levels', 'n/a', '5.00 %', '10.00 %', '7.50 %', '5-<10%', '0.00 %'] 
['Naphtha (Petroleum), Hydrotreated, Heavy', '64742-48-9', 'n/a', '5.00 %', '10.00 %', '7.50 %', '5-<10%', '0.00 %'] 
['Solvent Naphtha (Petroleum), Medium Aliph.', '64742-88-7', 'n/a', '5.00 %', '10.00 %', '7.50 %', '5-<10%', '0.00 %'] 
['Stoddard Solvent', '8052-41-3', 'n/a', '5.00 %', '10.00 %', '7.50 %', '5-<10%', '0.00 %'] 
['Carbon Dioxide', '124-38-9', 'n/a', '1.00 %', '3.00 %', '2.00 %', '1-<3%', '0.00 %'] 
['Nonane', '111-84-2', 'Less Than (Max)', '0.00 %', '1.00 %', '0.50 %', '<1%', '0.00 %'] 
['Naphthalene', '91-20-3', 'Less Than (Max)', '0.00 %', '1.00 %', '0.50 %', '<1%', '0.00 %']] 
[(10,), (10, 4)] 
[ ['Gasoline, Low Boiling Point Naphtha', '86290-81-5', 'n/a', '90.00 %', '100.00 %', '95.00 %', '90.00-100.00%', '0.00 %'] 
['EthylBenzene', '100-41-4', 'Blank (percentage not specified)', '0.00 %', '100.00 %', '50.00 %', '0.00 %'] 
['Toluene', '108-88-3', 'Blank (percentage not specified)', '0.00 %', '100.00 %', '50.00 %', '0.00 %'] 
['N-Hexane', '110-54-3', 'Blank (percentage not specified)', '0.00 %', '100.00 %', '50.00 %', '0.00 %'] 
['Cyclohexane', '110-82-7', 'Blank (percentage not specified)', '0.00 %', '100.00 %', '50.00 %', '0.00 %'] 
['Xylene (Mixed Isomers)', '1330-20-7', 'Blank (percentage not specified)', '0.00 %', '100.00 %', '50.00 %', '0.00 %'] 
['Trimethylbenzene. All Isomers', '25551-13-7', 'Blank (percentage not specified)', '0.00 %', '100.00 %', '50.00 %', '0.00 %'] 
['Benzene', '71-43-2', 'Blank (percentage not specified)', '0.00 %', '100.00 %', '50.00 %', '0.00 %'] 
['Naphthalene', '91-20-3', 'Blank (percentage not specified)', '0.00 %', '100.00 %', '50.00 %', '0.00 %']] 
[(9,), (9, 4)] 

答えて

2

numpyは不揃いをサポートしていません配列(すべての行が同じ長さではない配列)。あなたのIngredientsはボロボロのようだ:

>>> [len(x) for x in Ingredients] 
[8, 8, 8, 7, 8, 8, 8, 8, 8, 8] 

numpyのがこれをサポートしていないので、それはそれができる最善を尽くして、あなたにオブジェクトDTYPEの長さ10の配列を与えます。つまり、配列10x8を持つ代わりに、各要素がただ1つのオブジェクト(ここではPythonリストになりますが、numpyはこれ以上気にしません)のシェイプ10の配列を取得します。

あなたの処理を修正するか、パディングするかダミー値を追加するかによって、numpyがそれを見る前に配列を長方形にする必要があります。

numpyは実際には混在型の表データを扱うことを意図していませんが、そのためにおそらくpandasを使用したいと考えています。

関連する問題