2017-12-27 307 views
3

我有一個JSON輸出,我想在Excel中獲得。熊貓匹配行列值

enter image description here

我所試圖做的是配合重量列標題。 我可以得到這個輸出使用一些循環。

我想要得到的是所有的權重作爲第一列標題,如果它有值粘貼在其他NaN。

所需的輸出: enter image description here

page = requests.get(mainurl) 

data = json.loads(page.text) 
for i in data['categories']: 
     for j in i['items']: 
       if a == 1: # so changes and appends keys per category (highlighted) 
        a=2 # so not true in this loop 
        s=tuple(j['prices'].keys()) 
        ws.append(s) 
       PVAL=list(j['prices'].values()) 

       ws.append(PVAL)# append the value 
     a=1 # makes true next category 

p= [] 
for i in price: # I know this is absolute madness but dicts were getting sorted 
    i = str(i).replace("'",'').replace('{','').replace('}','')# get price values 
    p.append(i) 
###apppend in excel 

注:如你可以通過上面的代碼告訴,我是一個初學者。和上面的代碼可能已經相當有2-3行大熊貓:( 現在我與熊貓擺弄做到這一點,因爲我認爲這將是更快,更好

JsonOutput

主要編輯:

所以我沒有,所以我做了這麼多的時間。

for i in data['categories']: 
     for j in i['items']: 
      PVAL=j['prices'] 
      try: 
       ounce = PVAL['ounce'] 
      except: 
       ounce = 'NaN' 
      try: 
       gram = PVAL['gram'] 
      except:gram = 'NaN' 
      try: 
       twograms = PVAL['two_grams'] 
      except:twograms='NaN' 
      try: 
       quarter=PVAL['quarter'] 
      except:quarter='NaN' 
      try: 

       eighth=PVAL['eighth'] 
      except:eighth='NaN' 
      try: 

       halfO=PVAL['half_ounce'] 
      except:halfO='NaN' 
      try: 
       unit = PVAL['unit'] 
      except:unit='NaN' 
      try: 
       halfgram = PVAL['half_gram'] 
      except:halfgram='NaN' 

      name= j['name'] 
      cat = j['category_name'] 
      listname = j['listing_name'] 

      namel.append(name) 
      catl.append(cat) 
      listnamel.append(listname) 

      halfOl.append(halfO) 
      halfgraml.append(halfgram) 
      unitl.append(unit) 
      eighthl.append(eighth) 
      twogramsl.append(twograms) 
      quarterl.append(quarter) 
      ouncel.append(ounce) 
      graml.append(gram) 

然後將這些名單在Excel附加 我知道這不是Pythonic,但我仍然試圖找出一種很好的方式來做到這一點在熊貓。

+0

如果你能提供你的JSON輸入,我們可以複製和粘貼的樣本,那麼你應該得到的答案更快。 – Unatiel

+0

謝謝,我已經完成了。 –

+0

什麼是您使用的.json URL? – kbball

回答

3

由於我的代表仍然很低,目前無法發表任何評論,因此只會在此發佈,如果進一步說明提供,我們將對其進行編輯。

我沒有看到任何重量在所需的輸出。如果我正確理解了json文件,那麼您正在以給定的權重單位來迭代價格。預期的輸出是循環遍歷每個項目,並重復每個權重單位的價格。如果重量單位不可用,請放入NaN。是否有可能的重量單位列表?

熊貓還具有read_json功能,因此可以直接將其加載到熊貓數據框中。

- 編輯---

延誤道歉。請參考下面的回答

import pandas as pd 
import json 
from cytoolz.dicttoolz import merge 

#replace below with your json loader 
with open('sample.json') as json_dta: 
    dict_dta = json.load(json_dta) 

list_columns = ['id', 'name', 'category_name', 'ounce', 'gram', 'two_grams', 'quarter', 'eighth','half_ounce','unit','half_gram'] 
df = pd.io.json.json_normalize(dict_dta, ['categories', ['items']]).pipe(lambda x: x.drop('prices', 1).join(x.prices.apply(lambda y: pd.Series(merge(y)))))[list_columns] 

以上將導致到:

  id          name category_name ounce gram two_grams quarter eighth half_ounce unit half_gram 
0 10501503         Recon  Indica 99.0 9.0  0.0  40.0 25.0  70.0 NaN  NaN 
1 11614583        Kush Dawg  Indica 99.0 9.0  0.0  40.0 25.0  70.0 NaN  NaN 
2 8602219         OG Kush  Indica 99.0 9.0  0.0  40.0 25.0  70.0 NaN  NaN 
3 11448858      Poison OG Outdoor  Sativa 69.0 9.0  0.0  40.0 25.0  50.0 NaN  NaN 
4 11731126      SunBurn 2.0 Outdoor  Sativa 69.0 0.0  0.0  0.0  0.0   0.0 NaN  NaN 
5 6412418        Poison OG  Sativa 99.0 9.0  18.0  40.0 25.0  70.0 NaN  NaN 
6 8982466        Sativa Trim  Sativa 30.0 0.0  0.0  0.0  0.0  15.0 NaN  NaN 
7 11545434      Chupacabra Outdoor  Hybrid 69.0 9.0  0.0  40.0 25.0  50.0 NaN  NaN 
8 11458944  Platinum Girl Scout Cookies Outdoor  Hybrid 69.0 9.0  0.0  40.0 25.0  50.0 NaN  NaN 
9 11296163        Bubblegum  Hybrid 99.0 9.0  0.0  40.0 25.0  70.0 NaN  NaN 
10 11614623          C4  Hybrid 99.0 9.0  0.0  40.0 25.0  70.0 NaN  NaN 
11 11333124      Chem Dawg Outdoor  Hybrid 69.0 9.0  0.0  40.0 25.0  50.0 NaN  NaN 
12 11458988        Candy Kush  Hybrid 99.0 9.0  0.0  40.0 25.0  70.0 NaN  NaN 
13 10501592      Candy Kush Outdoor  Hybrid 69.0 9.0  0.0  40.0 25.0  50.0 NaN  NaN 
14 9123804      ZOOTROCKS LemonGrass  Edible NaN NaN  NaN  NaN  NaN   NaN 20.0  NaN 
15 9412336      Cherry Limeade 100mg  Edible NaN NaN  NaN  NaN  NaN   NaN 20.0  NaN 
16 4970503   Peanut Budda Buddha, 100mg REC  Edible NaN NaN  NaN  NaN  NaN   NaN 20.0  NaN 
17 9412238 Golden Strawberry Puck 100mg REC - CO  Edible NaN NaN  NaN  NaN  NaN   NaN 20.0  NaN 
18 9412232    Cherry Puck 100mg REC - CO  Edible NaN NaN  NaN  NaN  NaN   NaN 20.0  NaN 
19 9412228  Assorted Sour Pucks 100mg REC - CO  Edible NaN NaN  NaN  NaN  NaN   NaN 20.0  NaN 
20 6454686  Assorted Fruity Pucks 100mg REC - CO  Edible NaN NaN  NaN  NaN  NaN   NaN 20.0  NaN 
21 9412295 Sour Gummies Sativa 100mg, Recreational  Edible NaN NaN  NaN  NaN  NaN   NaN 20.0  NaN 
22 7494303        Cheeba Chews  Edible NaN NaN  NaN  NaN  NaN   NaN 20.0  NaN 
23 9411974    Mile High Mint, 100mg REC  Edible NaN NaN  NaN  NaN  NaN   NaN 20.0  NaN 
24 9411972      Boulder Bar, 100mg  Edible NaN NaN  NaN  NaN  NaN   NaN 20.0  NaN 
25 9412286 Sour Gummies Indica 100mg, Recreational  Edible NaN NaN  NaN  NaN  NaN   NaN 20.0  NaN 
26 9412242    Watermelon Puck 100mg - REC  Edible NaN NaN  NaN  NaN  NaN   NaN 20.0  NaN 
27 10066310     Coffee & Doughnuts  Edible NaN NaN  NaN  NaN  NaN   NaN 20.0  NaN 
28 10065124       Wildflower Honey  Edible NaN NaN  NaN  NaN  NaN   NaN 24.0  NaN 
29 10064962        Clover Honey  Edible NaN NaN  NaN  NaN  NaN   NaN 24.0  NaN 
30 9412290 Sour Gummies Peach 100mg, Recreational  Edible NaN NaN  NaN  NaN  NaN   NaN 20.0  NaN 
31 5926966       Stratos 100mg  Edible NaN NaN  NaN  NaN  NaN   NaN 20.0  NaN 
32 10066271       Salt & Nibs  Edible NaN NaN  NaN  NaN  NaN   NaN 20.0  NaN 
33 10065225      Yampa Valley Honey  Edible NaN NaN  NaN  NaN  NaN   NaN 24.0  NaN 
34 9412873     Fruit Punch Mints 100mg  Edible NaN NaN  NaN  NaN  NaN   NaN 20.0  NaN 
35 9412251 Sour Gummies Hybrid 100mg, Recreational  Edible NaN NaN  NaN  NaN  NaN   NaN 20.0  NaN 
36 9412922   Dutch Girl Carmel Waffle, 100mg  Edible NaN NaN  NaN  NaN  NaN   NaN 20.0  NaN 
37 6790292     Hybrid Distillate Jar Concentrate NaN 36.0  0.0  NaN  NaN   NaN NaN  0.0 
38 6379060       Hybrid Cartridge Concentrate NaN 25.0  0.0  NaN  NaN   NaN NaN  18.0 
39 9009149     Pure Cannabis Oil Hybrid Concentrate NaN 25.0  0.0  NaN  NaN   NaN NaN  0.0 
40 9400145     Pure Cannabis Oil Sativa Concentrate NaN 25.0  0.0  NaN  NaN   NaN NaN  0.0 
41 9409961       Sativa Cartridge Concentrate NaN 25.0  0.0  NaN  NaN   NaN NaN  18.0 
42 9400121     Pure Cannabis Oil Indica Concentrate NaN 25.0  0.0  NaN  NaN   NaN NaN  0.0 
43 9409954       Indica Cartridge Concentrate NaN 25.0  0.0  NaN  NaN   NaN NaN  18.0 
44 9400467     Indica Distillate Jar Concentrate NaN 36.0  0.0  NaN  NaN   NaN NaN  0.0 
45 9691836      PWO Wax by Mahatma Concentrate NaN 25.0  0.0  NaN  NaN   NaN NaN  0.0 
46 9409970     Sativa Distillate Jar Concentrate NaN 36.0  0.0  NaN  NaN   NaN NaN  0.0 
47 6134675         Bongs   Gear NaN NaN  NaN  NaN  NaN   NaN 40.0  NaN 
48 5993354      Small Glass Pipes   Gear NaN NaN  NaN  NaN  NaN   NaN 10.0  NaN 
49 4393434      Large Glass Pipes   Gear NaN NaN  NaN  NaN  NaN   NaN 20.0  NaN 
50 5941409     Pain Relief Salve, 2oz  Topicals NaN NaN  NaN  NaN  NaN   NaN 26.0  NaN 
51 8768835       THC Pain Stick  Topicals NaN NaN  NaN  NaN  NaN   NaN 20.0  NaN 
52 6370279  FORIA Pleasure (30ml) Spray Bottle  Topicals NaN NaN  NaN  NaN  NaN   NaN 55.0  NaN 
53 8911546        Bath Soak  Topicals NaN NaN  NaN  NaN  NaN   NaN 20.0  NaN 
54 9123854  FORIA Relief (2-pack) Suppositories  Topicals NaN NaN  NaN  NaN  NaN   NaN 24.0  NaN 
55 4187102   1 Gram Strain Specific-Prerolls  Preroll NaN NaN  NaN  NaN  NaN   NaN 9.0  NaN 
+0

你好,謝謝。你現在可以發表評論:)而且我已經編輯了我的問題,並且很好地回答了問題。謝謝! –

+0

而且我無法加載直接數據框架,因爲所有數組都沒有相同的大小,「價格」也是嵌套的字典。 –

+0

謝謝,這太神奇了。我會盡力讓我的頭靠近它。 –