Re: [問題]scrapy如何把抓到的資料存成這樣格式?

看板Python作者 (亮)時間10年前 (2015/02/12 00:33), 10年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
※ 引述《allen511081 (藍)》之銘言: : ※ 引述《allen511081 (藍)》之銘言: : : 各位好,小弟上次抓的資料格式已經如我上次發問的樣子 : : title birdName count : : XXX yyy zzz : : XXX yyy zzz : : XXX yyy zzz : : XXX yyy zzz : : 但是我現在想要把格式改成以下的樣子,這樣可以方便以後的處理 : : title title title title birdName count birdName count birdName count : : XXX XXX XXX XXX yyy zzz yyy zzz yyy zzz =>為一筆 : : 後面的birdName和count是依據網頁資料的筆數決定,每個網頁的筆數不一定, 用了原 po 提供的範例檔,底下是好讀完整版 http://nbviewer.ipython.org/gist/ccwang002/6b51ae21a91cba13c2ef/Transform.ipynb 我是用 Python 3.4 跑的,2.x 要注意一下 unicode 的轉換。 你爬下的內容有 \ufeff 之類的字元沒有清,要小心欄位不要處理錯, 我有特別獨立出來成輸入的參數 (obs_cols) 。 import pandas as pd def flatten_obs(bird_obs, obs_cols, preserved_cols=None): """Flatten brid observations into one row record.""" keep_cols = preserved_cols if preserved_cols else [] # assume values preserved columns don't change keep_values = list(bird_obs.loc[0, keep_cols].values) # flatten bird observation flatten_obs = [] flatten_cols = [] for bird_ix, (bird, count) in ( bird_obs.loc[:, obs_cols].iterrows() # extract wanted columns ): flatten_obs.extend([bird, count]) # create incremental column suffix, starting 0 flatten_cols.extend([ 'bridName_%d' % bird_ix, # birdName_0, ... 'count_%d' % bird_ix, # count_0, ... ]) # join kept and flatten columns as DataFrame return pd.DataFrame( [keep_values + flatten_obs], # nested list required by DataFrame columns = keep_cols + flatten_cols ) 使用的話, orig_df = pd.read_csv('./items.csv') obs_cols = ['birdName', 'count'] preserved_cols = ['weather', 'location', 'time', 'date', 'birdCondition'] flatten_df = flatten_obs(orig_df, obs_cols, preserved_cols) 合併 flatten_df 的話可以用 pandas.concat,重覆的就放在一起, 遇上沒有的欄位,就會自動補 NaN 值(相當於對不同記錄的欄位做 OUTER JOIN) 用法: pd.concat(flatten_df_list) 我覺得你在爬的時候那些 preserved_cols 值並不會重覆出現,應該是你額外加的, 所以現在有種做兩次功(重覆->去重覆)的感覺,也許可以重想一下程式的流程。 這個版本的 code 為了好讀和方便可能不是最有效的方式, 也盡量不用 Numpy 函式來處理,因為不確定你對它的熟悉度。 pd.concat 可以完全不用,因為合併的欄位長什麼可以很簡單的預測(最多幾隻鳥) 這樣就能預先建立好一個矩陣。 CSV 我直接讀有格式錯誤,我使用的檔案都放在 https://gist.github.com/6b51ae21a91cba13c2ef -- 以後不玩程式碼上色了… PyCon APAC 2015 Call for Proposals! https://tw.pycon.org/2015apac/en/ 也誠徵志工喔(站內信或 organizers@pycon.tw) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.44.9.45 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1423672403.A.E89.html ※ 編輯: ccwang002 (114.44.9.45), 02/12/2015 00:37:33
文章代碼(AID): #1KsuHJw9 (Python)
文章代碼(AID): #1KsuHJw9 (Python)