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

三步加星標
你好!我是 zhenguo
已推Pandas數(shù)據(jù)分析小技巧系列第一集,今天第二集,往下閱讀前可以先星標:Python與算法社區(qū),只有這樣才會第一時間收到我的推送。
明天就是2020-12-1,祝你年底一切順利!
小技巧6:如何快速找出 DataFrame 所有列 null 值個數(shù)?
實際使用的數(shù)據(jù),null 值在所難免。如何快速找出 DataFrame 所有列的 null 值個數(shù)?
使用 Pandas 能非常方便實現(xiàn),只需下面一行代碼:
data.isnull().sum()
data.isnull(): 逐行逐元素查找元素值是否為 null.
.sum(): 默認在 axis 為 0 上完成一次 reduce 求和。
上手實際數(shù)據(jù),使用這個小技巧,很爽。
讀取泰坦尼克預測生死的數(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 個 null 值
Cabin 列 687 個 null 值
Embarked 列 2 個 null 值
小技巧7:如何用 Pandas 快速生成時間序列數(shù)據(jù)?
與時間序列相關(guān)的問題,平時還是挺常見的。
介紹一個小技巧,使用 pd.util.testing.makeTimeDataFrame
只需要一行代碼,便能生成一個 index 為時間序列的 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
時間序列的間隔還能配置,默認的 A B C D 四列也支持配置。
import?numpy?as?np
df?=?pd.DataFrame(np.random.randint(1,1000,size=(10,3)),
??????????????????columns?=?['商品編碼','商品銷量','商品庫存'])
df.index?=?pd.util.testing.makeDateIndex(10,freq='H')
結(jié)果:
?商品編碼?商品銷量?商品庫存
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 的列?
某些場景需要重新排序 DataFrame 的列,如下 DataFrame:

如何將列快速變?yōu)椋?/p>
下面給出 2 種簡便的小技巧。先構(gòu)造數(shù)據(jù):
df?=?pd.DataFrame(np.random.randint(0,20,size=(5,7))?\
,columns=list('ABCDEFG'))
df
方法1,直接了當:
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)整步長由小時為天?
步長為小時的時間序列數(shù)據(jù),有沒有小技巧,快速完成下采樣,采集成按天的數(shù)據(jù)呢?
先生成測試數(shù)據(jù):
import?pandas?as?pd
import?numpy?as?np
df?=?pd.DataFrame(np.random.randint(1,10,size=(240,3)),?\
columns?=?['商品編碼','商品銷量','商品庫存'])
df.index?=?pd.util.testing.makeDateIndex(240,freq='H')
df
生成 240 行步長為小時間隔的數(shù)據(jù):

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

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

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