2017-12-27 312 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

谢谢,这太神奇了。我会尽力让我的头靠近它。 –