logo
Loading...

怎麼把DICTIONARY轉成DATAFRAME? - Cupoy

【DAY12的DICTIONARY長這樣】:res = {}for d in soup.find(c...

tag, other, if

怎麼把DICTIONARY轉成DATAFRAME?

2020/04/11 下午 02:22
Python網路爬蟲討論版
觀看數:11
回答數:3
收藏數:2
tag
other
if

【DAY12的DICTIONARY長這樣】:

res = {}

for d in soup.find(class_="part_list_2").find_all('h3'):

   date = d.find(class_="date").text

   title = d.find_all('a')[-1].text.replace('\u3000','')

   tag = d.find(class_='tag').text  # tag = d.select('.tag')[0].text # other way, CSS Selector

   res.setdefault(tag, []) # if the tag in this run is not exist, create a key & a value with list 

   res[tag].append({

       'title': title,

       'date': date

   })

------------------------------------------

約莫是 {'tag'1:[{title1, date1}, {title2, day2}]} 這樣的字典

我想把他變成像下面這樣的dataframe,請問該怎麼寫程式碼?

有嘗試在網路上找方法,但好像一直找不到合適的答案

相關想到的詞大概是

1. DICTIONARY TO DATARAME

2. REPEAT KEY IN DATAFRAME

回答列表

  • 2020/04/12 上午 02:32
    張維元 (WeiYuan)
    贊同數:1
    不贊同數:0
    留言數:1

    嗨,要產出你想要的 DataFrame 應該是這樣:


    ```

    import pandas as pd

    pd.DataFrame([{

            'tag': 'tag1', 

            'title': 'title1',

            'date': 'date1'

        }, {

            'tag': 'tag',

            'title': 'title2',

            'date': 'day2'

        }

    ])

    ```


    所以這個其實不是轉 DataFrame 的問題,而是要轉什麼資料的問題。所以我們要看看如何把


    {'tag':[{'title1', 'date1'}, {'title2', 'day2'}]


    變成:


    [{

            'tag': 'tag1', 

            'title': 'title1',

            'date': 'date1'

        }, {

            'tag': 'tag',

            'title': 'title2',

            'date': 'day2'

        }

    ]


    這個其實就是一個程式的邏輯問題,你可以先想想看:)


    如果這個回答對你有幫助請主動點選「有幫助」的按鈕,也可以追蹤我的GITHUB帳號。若還有問題的話,也歡迎繼續再追問或者把你理解的部分整理上來,我都會提供你 Review 和 Feedback 😃😃😃

  • 2020/04/12 下午 08:07
    贊同數:0
    不贊同數:0
    留言數:4

    【追問】

    嘗試寫了,原來是要重組結構。

    但是有一點差錯

    我知道這個問題只要要把d={} 移到迴圈最內層就可以解決

    但是在迴圈裡明明印出來沒問題,最後的結果卻只存了每個tag的最後一個{}

    不知道是為什麼?

  • 2020/04/18 上午 00:52
    張維元 (WeiYuan)
    贊同數:0
    不贊同數:0
    留言數:0

    嗨,


    「我知道這個問題只要要把d={} 移到迴圈最內層就可以解決」


    => 原因是在 Python 這裡的 dict 是 call-by-reference,簡單來說就是這裡定義的 d 是共用的,所以你後面改變的時候,之前的 d 也會跟著被改變。


    如果這個回答對你有幫助請主動點選「有幫助」的按鈕,也可以追蹤我的GITHUB帳號。若還有問題的話,也歡迎繼續再追問或者把你理解的部分整理上來,我都會提供你 Review 和 Feedback 😃😃😃