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

作者: ccwang002 (亮)   2015-02-12 00:33:13
※ 引述《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

Links booklink

Contact Us: admin [ a t ] ucptt.com