Pandas 數(shù)據(jù)分析第 六 集

三步加星標(biāo)
??你好,我是 zhenguo
Pandas 使用技巧最近連載 5 篇,是時(shí)候分析一下它的基本框架。Pandas 使用行索引和列標(biāo)簽表達(dá)和分析數(shù)據(jù),分別對(duì)應(yīng) axis=0, axis=1,行索引、列標(biāo)簽帶來(lái)一些便捷的功能。
如果玩Pandas,還沒(méi)有注意到對(duì)齊 alignment,這個(gè)特性,那該好好看看接下來(lái)的分析。
基于行索引的對(duì)齊,與基于列標(biāo)簽的對(duì)齊,原理是一致的,它們其實(shí)相當(dāng)于字典的 key,起到對(duì)齊數(shù)據(jù)作用。但是,這種說(shuō)法抽象了些,沒(méi)有例子不好想象出對(duì)齊的作用。
下面使用前幾天推薦你的?9 個(gè)小而經(jīng)典的數(shù)據(jù)集,里的 google app store 這個(gè)小而經(jīng)典的數(shù)據(jù)集,重點(diǎn)分析“行對(duì)齊”功能,理解它后,列對(duì)齊也自然理解。
導(dǎo)入包:
import?pandas?as?pd?
import?numpy?as?np
import?matplotlib.pyplot?as?plt
import?seaborn?as?sns
版本號(hào):
print(pd.__version__)
print(np.__version__)
print(sns.__version__)
1.0.1
1.18.1
0.11.0
導(dǎo)入數(shù)據(jù):
df?=?pd.read_csv('kaggle-data/googleplaystore.csv')
df.head(3)

rank?=?df_normal.Rating.rank(method='min',na_option='bottom',ascending=False)
rank.head(3)
method 參數(shù)指定:Rating 值相等時(shí)排名取小,na_option 指定空值排到最后,ascending 指定倒序
將上面得到的新列 rank 插入?df_normal 中:
df_normal.insert(2,'rank',?rank,?allow_duplicates=True)
df_normal.head(3)

因?yàn)?df_normal ?和 rank 的行索引 index 都是從0 開(kāi)始的自增,所以即便沒(méi)有自動(dòng)對(duì)齊,也是準(zhǔn)確的:

###?根據(jù)?Reviews?次數(shù)從少到多排序
df_by_reviews?=?df_normal.sort_values(by='Reviews')
df_by_reviews.head(3)

得到 df_by_reviews ,注意它的 index 不是按照從0自增

此時(shí)在 df_by_reviews 中,插入 rank 還能確保數(shù)據(jù)對(duì)齊嗎
###?此時(shí)插入排名?rank?列,數(shù)據(jù)會(huì)自動(dòng)對(duì)其
df_by_reviews.insert(3,'rank_copy',rank)
df_by_reviews.head()
看到 rank 列 和 rank_copy 列相等,通過(guò)下面一行代碼驗(yàn)證出來(lái):
###?如果后者index序列中某些值沒(méi)有出現(xiàn)在df_by_reviews的index中
###?舉個(gè)例子
df_test?=?pd.DataFrame({'a':[1,4,7],'b':[5,2,1]},index=[4,3,1])
ser?=?pd.Series(index=[3,2,1],data=[0,9,8])

