python_判斷部份文字是否在某個欄位中及自動向上填滿、向下填滿
<Line廢文分析> Part2: isin, bfill,ffill
Published in
3 min readDec 27, 2019
在上一篇文章中,我們學會了如何讀取欄位數不一致的raw data,請參考以下文章。
這章我們要來解決一個待解決的格式問題:
我們想要把圖中灰色位置的值,移動到獨立的欄位之中,這樣後續比較好分析。簡單的兩步驟邏輯:
步驟一
先判斷A欄位中,文字如果包含"上午"或"下午",則我們就在D欄位中填入NaN值,反之,則填入欄位A的值。
舉例來說:
A欄Row2的值為"2019/09/26(四)",因此不包含”上午”或”下午”,在D欄Row2會填上”2019/09/26(四)”。A欄Row3的值為"下午02:23",因此包含”上午”或”下午”,在D欄Row3會填上NaN。
代碼如下:
df0['D'] = df0['A']
for i, k in zip(df0['A'],range(0,len(df0))):
if '下午' in i or '上午' in i :
df0.iloc[k,3]=np.nan
這邊用到之前有提到的好用zip迴圈,忘記的朋友可以參考:
df0[‘D’] = df0[‘A’] > 這步驟是先複製一份欄位D出來。
for i, k in zip(df0[‘A’],range(0,len(df0))): > 這邊使用zip的迴圈來搭配判斷式。i代表df0[‘A’]內的值:可能是下午OO, 上午OO, 2019/XX/XX(X)…等。 k代表目前執行到的列數: 0,1,2,3….。
if '下午' in i or '上午' in i : > 這邊意思是如果"上午"或是"下午"被包含在文字中。
df0.iloc[k,3]=np.nan >如果前一個是文字被包含在其中,則我們就讓欄位D顯示為nan。
步驟二
欄位D剩下的欄位就是各種日期"2019/XX/XX(X)",因此再來用簡單的向下填滿就完成囉!
代碼如下:
df0 = df0.fillna(method='ffill') #如果是向上填滿則method='bfill'
完成囉!