關於昨天【#】的未解之題,首先來驗證看看有幾筆資料是需要被清理的。
接著再用DataFrame找出他的index來進行刪除。
L1=[]
for i in data['ride_length']:
L1.append(i)
L2=[]
for i in range(len(L1)):
de=L1[i].find('#')
if de!=-1:
L2.append(de)
len(L2)
###
Out[18]: 117
得出共有117筆在租借時長是【#】的資料。
接著從DataFrame中移除它們,在網路上找到了兩種可以用df來篩選的方式(因為使用mask不成功(笑)),分別是df.str.contains和df.isin(),這是因為我的需求是去除包含字串的內容,如果單純只是篩選區間的話可以直接使用運算子符號。有需要者可以看看大神的解釋。
data.loc[data['ride_length'].str.contains('#')] #看出哪是些index含有#
###
ride_id ... day_of_the_week
7001 6FABADDD595AF922 ... 6
7035 867C195C5650C884 ... 6
7040 13BCB74BAFDADB21 ... 6
24362 4B82BF3DF7E45D1D ... 6
24365 3361A4413B4813B8 ... 6
... ... ...
71044 D5E25F13DC2C9154 ... 3
71097 FC3616DAF48D1E33 ... 3
76025 D353DE3B13901B98 ... 2
100804 EF0E692D7B4BABB3 ... 6
150596 9461DFF13D8BA8AD ... 6
[117 rows x 15 columns]
使用df.drop()搭配str.contains()條件來試試看清理DataFrame
結果因為是迴圈,跑了超級久+電腦發熱xd,看來是用了不太好的方式(?) (而且在截稿前都還沒有跑完)
希望可以正確完成,晚點來研究有沒有聰明的作法
for i in data['ride_length']:
if [data['ride_length'].str.contains('#')]== True:
print('刪除!')
data.drop(data.index[data['ride_length'].str.contains('#')])
else:
print('run...')
pass
我覺得篩選這個功能在Python中應該蠻常遇到的,以前有聽過遮罩但沒有實際經驗,這次這個資料剛好被我碰到要處理,也算是一種學習!
今天花了蠻長時間在嘗試和找網路資源的,明天感覺要加快速度了><~