Pandas數(shù)據(jù)分析小技巧系列 第二集

三步加星標(biāo)
你好!我是 zhenguo
已推Pandas數(shù)據(jù)分析小技巧系列第一集,今天第二集,往下閱讀前可以先星標(biāo):Python與算法社區(qū),只有這樣才會(huì)第一時(shí)間收到我的推送。
明天就是2020-12-1,祝你年底一切順利!
小技巧6:如何快速找出 DataFrame 所有列 null 值個(gè)數(shù)?
實(shí)際使用的數(shù)據(jù),null 值在所難免。如何快速找出 DataFrame 所有列的 null 值個(gè)數(shù)?
使用 Pandas 能非常方便實(shí)現(xiàn),只需下面一行代碼:
data.isnull().sum()
data.isnull(): 逐行逐元素查找元素值是否為 null.
.sum(): 默認(rèn)在 axis 為 0 上完成一次 reduce 求和。
上手實(shí)際數(shù)據(jù),使用這個(gè)小技巧,很爽。
讀取泰坦尼克預(yù)測(cè)生死的數(shù)據(jù)集
data?=?pd.read_csv('titanicdataset-traincsv/train.csv')
結(jié)果:

檢查 null 值:
data.isnull().sum()
結(jié)果:
PassengerId??????0
Survived?????????0
Pclass???????????0
Name?????????????0
Sex??????????????0
Age????????????177
SibSp????????????0
Parch????????????0
Ticket???????????0
Fare?????????????0
Cabin??????????687
Embarked?????????2
dtype:?int64
Age 列 177 個(gè) null 值
Cabin 列 687 個(gè) null 值
Embarked 列 2 個(gè) null 值
小技巧7:如何用 Pandas 快速生成時(shí)間序列數(shù)據(jù)?
與時(shí)間序列相關(guān)的問(wèn)題,平時(shí)還是挺常見(jiàn)的。
介紹一個(gè)小技巧,使用 pd.util.testing.makeTimeDataFrame
只需要一行代碼,便能生成一個(gè) index 為時(shí)間序列的 DataFrame:
import?pandas?as?pd
pd.util.testing.makeTimeDataFrame(10)
結(jié)果:
A?B?C?D
2000-01-03?0.932776?-1.509302?0.285825?0.941729
2000-01-04?0.565230?-1.598449?-0.786274?-0.221476
2000-01-05?-0.152743?-0.392053?-0.127415?0.841907
2000-01-06?1.321998?-0.927537?0.205666?-0.041110
2000-01-07?0.324359?1.512743?0.553633?0.392068
2000-01-10?-0.566780?0.201565?-0.801172?-1.165768
2000-01-11?-0.259348?-0.035893?-1.363496?0.475600
2000-01-12?-0.341700?-1.438874?-0.260598?-0.283653
2000-01-13?-1.085183?0.286239?2.475605?-1.068053
2000-01-14?-0.057128?-0.602625?0.461550?0.033472
時(shí)間序列的間隔還能配置,默認(rèn)的 A B C D 四列也支持配置。
import?numpy?as?np
df?=?pd.DataFrame(np.random.randint(1,1000,size=(10,3)),
??????????????????columns?=?['商品編碼','商品銷(xiāo)量','商品庫(kù)存'])
df.index?=?pd.util.testing.makeDateIndex(10,freq='H')
結(jié)果:
?商品編碼?商品銷(xiāo)量?商品庫(kù)存
2000-01-01?00:00:00?99?264?98
2000-01-01?01:00:00?294?406?827
2000-01-01?02:00:00?89?221?931
2000-01-01?03:00:00?962?153?956
2000-01-01?04:00:00?538?46?374
2000-01-01?05:00:00?226?973?750
2000-01-01?06:00:00?193?866?7
2000-01-01?07:00:00?300?129?474
2000-01-01?08:00:00?966?372?835
2000-01-01?09:00:00?687?493?910
小技巧8:如何重新排序 DataFrame 的列?
某些場(chǎng)景需要重新排序 DataFrame 的列,如下 DataFrame:

如何將列快速變?yōu)椋?/p>
下面給出 2 種簡(jiǎn)便的小技巧。先構(gòu)造數(shù)據(jù):
df?=?pd.DataFrame(np.random.randint(0,20,size=(5,7))?\
,columns=list('ABCDEFG'))
df
方法1,直接了當(dāng):
df2?=?df[["A",?"C",?"D",?"F",?"E",?"G",?"B"]]
df2
結(jié)果:

方法2,也了解下:
cols?=?df.columns[[0,?2?,?3,?5,?4,?6,?1]]
df3?=?df[cols]
df3
也能得到方法1的結(jié)果。
小技巧9:如何完成數(shù)據(jù)下采樣,調(diào)整步長(zhǎng)由小時(shí)為天?
步長(zhǎng)為小時(shí)的時(shí)間序列數(shù)據(jù),有沒(méi)有小技巧,快速完成下采樣,采集成按天的數(shù)據(jù)呢?
先生成測(cè)試數(shù)據(jù):
import?pandas?as?pd
import?numpy?as?np
df?=?pd.DataFrame(np.random.randint(1,10,size=(240,3)),?\
columns?=?['商品編碼','商品銷(xiāo)量','商品庫(kù)存'])
df.index?=?pd.util.testing.makeDateIndex(240,freq='H')
df
生成 240 行步長(zhǎng)為小時(shí)間隔的數(shù)據(jù):

小技巧,使用 resample 方法,合并為天(D)
day_df?=?df.resample("D")["商品銷(xiāo)量"].sum().to_frame()
day_df
結(jié)果如下,10行,240小時(shí),正好為 10 days:

看到這兒了,別走開(kāi)哈,下面是驚喜時(shí)刻。承蒙出版社老朋友的厚愛(ài),贈(zèng)送給 Python與算法社區(qū)《趣學(xué)Python算法 100 例》5 本:

算法源于生活,又可以改變生活。本書(shū)專(zhuān)為Python+算法初學(xué)者量身打造!詳解100個(gè)趣味編程算法實(shí)例,內(nèi)容涵蓋Python編程的基礎(chǔ)知識(shí)和常用算法,是初學(xué)算法設(shè)計(jì)與實(shí)現(xiàn)的極佳選擇,詳情點(diǎn)擊下面圖片:
