一個(gè)真實(shí)問(wèn)題,搞定三個(gè)冷門(mén)pandas函數(shù)

最近有一個(gè)粉絲問(wèn)過(guò)我一個(gè)問(wèn)題,覺(jué)得挺有意思,分享給大家。經(jīng)過(guò)簡(jiǎn)化后大概就是有一個(gè)長(zhǎng)這樣的時(shí)間序列數(shù)據(jù)?
可以看到,一共有15行數(shù)據(jù),其中有一些行的value是空值, 現(xiàn)在想在不改變?cè)瓟?shù)據(jù)的情況下取出從第一個(gè)不是空值的行之后的全部數(shù)據(jù)?
嗯,看上去不是很難,但如果添加一個(gè)額外要求:「使用純pandas函數(shù)完成」 這就涉及到了一些不常用的函數(shù),一起來(lái)看看。
首先需要構(gòu)造這樣的數(shù)據(jù),在Python中我們可以先按照規(guī)則生成字符串,然后使用time或datatime模塊進(jìn)行轉(zhuǎn)換,方法很多,但是pandas中如何直接生成呢?這就涉及到第一個(gè)函數(shù)date_range。
? pd.date_range
其實(shí)在pandas中生成時(shí)間序列數(shù)據(jù)比其他方法要方便很多,使用.date_range一行代碼即可,該函數(shù)使用方法為
pandas.date_range(start=None,?end=None,?periods=None,?freq=None,?tz=None,?normalize=False,?name=None,?closed=None,?**kwargs)
可以通過(guò)起止日期來(lái)生成
也可以通過(guò)開(kāi)始日期與長(zhǎng)度生成
上面的默認(rèn)間隔是1天,當(dāng)然是可以自定義,比如修改為5天
該方法還支持生成更多的指定形式的時(shí)間序列數(shù)據(jù),感興趣的讀者可以自行查閱官方文檔,現(xiàn)在我們就可以生成示例數(shù)據(jù)?
df?=?pd.DataFrame(
????{???'date':?[i?for?i?in?pd.date_range('20200701','20200715')],
????????'value':?['','','','','',1,6,1,2,'',2,1,6,0,1]}
)?

接下來(lái)我的思路是
判斷value列的每個(gè)值是否為空值,返回 Ture/False找到第一個(gè)為False的索引,取后面全部的數(shù)據(jù)
為了只用pandas實(shí)現(xiàn)這個(gè)思路,用到了兩個(gè)不常見(jiàn)的函數(shù),讓我們慢慢說(shuō)。
? pandas.Series.ne
ne函數(shù)可以比較兩個(gè)Series,常用于缺失值填充,下面是一個(gè)例子

除了可以比較兩個(gè)Series之外,對(duì)于我們的問(wèn)題,它可以比較元素:返回True如果這個(gè)值不是你指定的值,聽(tīng)上去很繞,我們看代碼
可以看到,所有空值都被標(biāo)記為False,接下來(lái)要做的就是找到第一個(gè)True元素的索引,并取出之后的全部數(shù)據(jù)。
? pandas.DataFrame.idxmax
如何在pandas中直接定位一組數(shù)據(jù)中最大/最小值的位置?可以使用idxmax/idxmin,這個(gè)函數(shù)不難,直接看一個(gè)簡(jiǎn)單的例子
它可以返回最大值/最小值第一次出現(xiàn)的位置索引!剛好可以滿足我們的要求,現(xiàn)在就可以將idxmax與之前的ne函數(shù)結(jié)合起來(lái)實(shí)現(xiàn)我們需求
df['value'].ne('').idxmax()
#?5
返回的索引值是5,最后就可以使用loc函數(shù)一行代碼實(shí)現(xiàn)我們的需求
其實(shí)這個(gè)問(wèn)題還有很多其他的辦法,比如可以先篩選出所有True的索引,然后使用.first_valid_index()找到第一個(gè)True,最后也可以不用loc直接df[df['value'].ne('')]實(shí)現(xiàn)。
但我還希望你能掌握上面三個(gè)函數(shù)并靈活運(yùn)用,如果有更好的思路可以在評(píng)論區(qū)留言。
-END-
文末推薦一本數(shù)據(jù)分析相關(guān)的書(shū):Python數(shù)據(jù)分析與可視化(本書(shū)以零基礎(chǔ)為起點(diǎn),系統(tǒng)地介紹了Python在數(shù)據(jù)處理與可視化分析方面的應(yīng)用。全書(shū)共分3篇12章內(nèi)容。第1篇:基礎(chǔ)篇。第2篇:應(yīng)用篇。第3篇:實(shí)戰(zhàn)篇?綜合案例!本書(shū)既適合希望從事Python數(shù)據(jù)處理與可視化的用戶學(xué)習(xí),也適合廣大職業(yè)院校作為相關(guān)專業(yè)教材,還可作為社會(huì)培訓(xùn)班的參考用書(shū))現(xiàn)在京東和當(dāng)當(dāng)都有優(yōu)惠活動(dòng),點(diǎn)擊下方圖片查看詳情!

